Sed
使用 sed 添加後綴:為什麼在第二次使用時會忽略變數?
我想到了以下幾點:
xx=abc ; echo "abcde-123" | sed -e s/$xx/$xx_nnn/g
會導致
abcde_nnn123
. 然而結果是去123
可以看出,前綴
xx=abc
被刪除,_nnn
替換模式中的 完全被忽略。為什麼會這樣?
主要問題在這裡:
/$xx_nnn/
您實際上傳遞了一個$xx_nnn
實際上不存在的名為的變數。所以基本上你正在執行:xx=abc ; echo "abcde-123" | sed -e s/$xx//g #or what is equivalent: echo "abcde-123" | sed -e s/abc//g
出於這個原因,你得到:
de-123
,你什麼都abc
沒有。最好的解決方案是使用:
${varname}
,例如:xx=abc ; echo "abcde-123" | sed -e "s/$xx/${xx}_nnn/g"
所有後面的
}
都不會是變數名的一部分。關於:
將導致 abcde_nnn123
那不會是結果。使用
sed
您提供的命令,您將獲得以下資訊:abc_nnnde-123
所以如果你真的想得到:
abcde_nnn123
那麼你的程式碼應該是這樣的:xx=abcde ; echo "abcde123" | sed -e "s/$xx/${xx}_nnn/g"
您還可以使用bash 參數擴展替換字元串。例如:
str='abcde123' xx='abcde' echo "${str/$xx/${xx}_nnn}" # means: in 'abcde123' replace 'abcde' #with `abcde_nnn`