2016-07-08 91 views
4

我有一個DEPS變量,名爲:到每一行的每個字添加前綴在bash

deps='word1 word2' 

我要添加前綴變量的每一個字。

我試着用:

echo $deps | while read word do \ echo "prefix-$word" \ done 

,但我得到:

慶典:附近意外的標記語法錯誤'做」

任何幫助嗎?感謝

+0

所以你希望輸出爲'prefix-word1 prefix-word2',對吧? – fedorqui

+0

你需要分號碼,而不是它會和他們一起工作,但它會阻止錯誤。 – 123

+0

'爲我在$ deps;做回聲「前綴 - $我」;完成' – 123

回答

12

隨着SED:

$ deps='word1 word2' 
$ echo "$deps" | sed 's/[^ ]* */prefix-&/g' 
prefix-word1 prefix-word2 
+0

謝謝,這工作正常 –

+0

也許更簡單:'echo $ deps | sed's \\ Nasorenga

+0

@Nasorenga是的,但值得注意的是'\ <' and '\>'是GNU語法,所以便攜性較差。 – SLePort

0

可以讀取的字符串到一個數組,然後在前面加上字符串每一個項目:

$ IFS=' ' read -r -a myarray <<< "word1 word2" 
$ printf "%s\n" "${myarray[@]}" 
word1 
word2 
$ printf "prefix-%s\n" "${myarray[@]}" 
prefix-word1 
prefix-word2 
+4

您也可以使用原始字符串而不是數組'printf'前綴 - %s \ n「$ deps' – 123

0

another question我對面的標誌來抓開始( \<)和結尾(\>)的單詞。有了這些,你可以稍微縮短上面的解決方案SLePort。該解決方案很好地延伸到追加一個後綴,除了前綴之外我還需要這個後綴,但無法弄清楚如何使用上面的解決方案,因爲&還包括該單詞之後可能的尾隨空白。

所以我的解決辦法是這樣的:

$ deps='word1 word2' 

# add prefix: 
$ echo "$deps" | sed 's/\</prefix-/g' 
prefix-word1 prefix-word2 

# add suffix: 
$ echo "$deps" | sed 's/\>/-suffix/g' 
word1-suffix word2-suffix 

說明:\<每個單詞的開頭匹配,並\>每個單詞的結尾匹配。你可以簡單地用前綴/後綴「替換」它們,導致它們被前置/附加。無需再在替換中引用它們,因爲它們不是「真正」的字符!

1

對於表現良好的字符串,最好的回答是:

printf "prefix-%s\n" $deps 

由123在評論fedorqui的答案建議。

說明:

  • 沒有報價,bash將根據$IFS(默認爲" \n\t")調用printf
  • printf之前分割的$deps內容評估圖案的每個所提供的參數,並寫入輸出到標準輸出。
  • printf是一個內置的shell(至少用於bash)並且不會分叉另一個進程,所以這比基於sed的解決方案更快。
相關問題