Bash

如果引用的變數為空,如何將其擴展為空?

  • January 14, 2018

假設我有一個腳本在做:

some-command "$var1" "$var2" ...

而且,如果var1為空,我寧願將其替換為空字元串而不是空字元串,以便執行的命令為:

some-command "$var2" ...

並不是:

some-command '' "$var2" ...

有沒有比測試變數並有條件地包含它更簡單的方法?

if [ -n "$1" ]; then
   some-command "$var1" "$var2" ...
   # or some variant using arrays to build the command
   # args+=("$var1")
else
   some-command "$var2" ...
fi

是否有參數替換可以在 bash、zsh 等中擴展為空?我可能仍想在其餘參數中使用萬用字元,因此禁用它並取消引用變數不是一種選擇。

符合 Posix 的 shellBash 具有 ${parameter:+word}

如果參數未設置或為空,則應替換為空;否則,應替換 word 的擴展(如果 word 省略,則為字元串) 。

所以你可以這樣做:

${var1:+"$var1"}

並且已經過var1檢查,"$var1"如果它已設置且非空(使用普通的雙引號規則),則可以使用它。否則它會擴展為空。請注意,這裡僅引用內部部分,而不是全部內容。

這同樣適用於 zsh。你必須重複這個變數,所以它並不理想,但它完全符合你的要求。

如果您希望將設置但為空的變數擴展為空參數,請${var1+"$var1"}改用。

引用自:https://unix.stackexchange.com/questions/415990