我已經改變了從外殼到dash
上bash 4.2.37
Debian的7SED變量替換使用bash
現在,下面不工作下去:
sed -i.bak "/${VARIABLE}/d" /path/file
sed -i.bak '/'$VARIABLE'/d' /path/file
這將產生:
sed: -e expression #1, char 0: no previous regular expression
使用bash 3.2
在OS X上,按預期工作
我已經改變了從外殼到dash
上bash 4.2.37
Debian的7SED變量替換使用bash
現在,下面不工作下去:
sed -i.bak "/${VARIABLE}/d" /path/file
sed -i.bak '/'$VARIABLE'/d' /path/file
這將產生:
sed: -e expression #1, char 0: no previous regular expression
使用bash 3.2
在OS X上,按預期工作
包裝在一個if語句:
if [[ ! -z $VAR ]]; then
sed -i.bak /"${VAR}"/d test;
fi
或作爲oneliner:
if [[ ! -z $VAR ]]; then sed -i.bak /"${VAR}"/d filename.txt; fi
或者更簡單:
[[ ! -z $VAR ]] && sed -i.bak /"${VAR}"/d filename.txt
原來的答案: 對我來說,以下工作:
sed -i.bak /"$VARIABLE"/d /path/file
GNU Bash 4.2-2ubuntu2.1
增加了一些替代品 –
無論您的shell如何,sed
語法錯誤都是相同的。如果VARIABLE
爲空,那就是你所得到的。
更改shell可能會更改定義了哪些變量。例如,BASH_VERSION
顯然只會在Bash中設置。或者你可以在你的.bashrc
本地定義變量,Dash不會讀取;有許多其他啓動文件是Bash使用的,但Dash沒有。
你可以做的是改變你的腳本需要VARIABLE
進行設置:
: ${variable?Not set}
這是一個常見的Bourne shell成語退出如果一個變量沒有設置。 :
僞命令就像一個註釋,但它評估它的參數;和${variable?Message}
當評估將退出外殼Message
如果variable
未設置。
我更傾向於使用'$ {var:-default value}',但是當你真的想退出時,使用'$ {var?-doh}'。在'?'或':'之後添加'-'使其適用於「未設置或空白」,而不是「未設置」,這通常是我使用其中任何一種時的意思。 – dannysauer
如果'$ VARIABLE'爲空,你會得到這個錯誤信息。故意有空嗎?在這種情況下,你對命令的期望是什麼? –
不要空。 $ VARIABLE的IP通過了第一個參數bash腳本。 ./script.sh IP – abkrim
看到您的評論後就可以了。驗證傳遞給腳本的第二個參數是否爲空。 ./script.sh主機名短名稱。用echo $ 1驗證主機名,好,但是echo $ 2返回空值。 – abkrim