我有一個DEPS變量,名爲:到每一行的每個字添加前綴在bash
deps='word1 word2'
我要添加前綴變量的每一個字。
我試着用:
echo $deps | while read word do \ echo "prefix-$word" \ done
,但我得到:
慶典:附近意外的標記語法錯誤'做」
任何幫助嗎?感謝
我有一個DEPS變量,名爲:到每一行的每個字添加前綴在bash
deps='word1 word2'
我要添加前綴變量的每一個字。
我試着用:
echo $deps | while read word do \ echo "prefix-$word" \ done
,但我得到:
慶典:附近意外的標記語法錯誤'做」
任何幫助嗎?感謝
可以讀取的字符串到一個數組,然後在前面加上字符串每一個項目:
$ IFS=' ' read -r -a myarray <<< "word1 word2"
$ printf "%s\n" "${myarray[@]}"
word1
word2
$ printf "prefix-%s\n" "${myarray[@]}"
prefix-word1
prefix-word2
您也可以使用原始字符串而不是數組'printf'前綴 - %s \ n「$ deps' – 123
在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
說明:\<
每個單詞的開頭匹配,並\>
每個單詞的結尾匹配。你可以簡單地用前綴/後綴「替換」它們,導致它們被前置/附加。無需再在替換中引用它們,因爲它們不是「真正」的字符!
對於表現良好的字符串,最好的回答是:
printf "prefix-%s\n" $deps
由123在評論fedorqui的答案建議。
說明:
$IFS
(默認爲" \n\t"
)調用printf
printf
之前分割的$deps
內容評估圖案的每個所提供的參數,並寫入輸出到標準輸出。printf
是一個內置的shell(至少用於bash)並且不會分叉另一個進程,所以這比基於sed的解決方案更快。
所以你希望輸出爲'prefix-word1 prefix-word2',對吧? – fedorqui
你需要分號碼,而不是它會和他們一起工作,但它會阻止錯誤。 – 123
'爲我在$ deps;做回聲「前綴 - $我」;完成' – 123