Bash 執行行中的載入條件

Bash 執行行中的載入條件

我想執行帶有取決於變數屬性的選項的命令。如果設定了變量,則載入帶有值的選項,但如果沒有設置,則不載入該選項。這就是我所擁有的:

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 中出現的奇怪字元具有穩健性。

相關內容