我想執行帶有取決於變數屬性的選項的命令。如果設定了變量,則載入帶有值的選項,但如果沒有設置,則不載入該選項。這就是我所擁有的:
if [ -n "$variable" ]
then command ... -option $variable
else command ...
fi
我們的想法是將其合併到一個帶有條件的命令中,這樣我就不必重複該命令的其他選項兩次。
非常感謝您的寶貴時間。
答案1
使用 bash 數組:
opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"
因為這使用 bash 數組,所以即使$variable
包含空格或其他困難字符,它也能工作。
怎麼運作的
opts=()
這將建立一個名為 的空數組
opts
。[ "$variable" ] && opts+=(-option "$variable")
如果
$variable
不為空,則將-option
和追加$variable
到數組中opts
。command ... "${opts[@]}"
這將執行您的命令。如果
opts
非空,則將其元素新增至命令中。如果opts
為空,則不添加任何內容:就好像"${opts[@]}"
根本不存在一樣。
答案2
然後接受您的命令並將其設定為如下所示的函數:
function command_function () {
command ... -option $variable
}
if [ -n "$variable" ]
then command_function ... -option $variable
else command_function ...
fi
讓您知道 Bash 函數中的括號不會傳遞任何內容。
答案3
使用重擊代換 (Shell 參數擴展) 以獲得簡潔、可讀的語法:
$ echo ${variable:+-option $variable}
$ variable=yes
$ echo ${variable:+-option $variable}
-option yes
答案4
下面一行就可以了:
[ x"$VARIABLE" = x ] && echo UNSET || echo SET
這測試變數是否x"$變數"等於X,換句話說,如果$變數是空的;如果測試滿足第一個選項(回顯未設定) 被執行,如果測試是不是滿足最後一個選項被執行(迴聲設定)。如果您不想在第二種情況下做任何事情,您可以這樣做
[ x"$VARIABLE" = x ] && echo UNSET || :
這比其他解決方案要簡單得多,只允許對條件進行一次評估,對於 VARIABLE 中出現的奇怪字元具有穩健性。