Bash
如果引用的變數為空,如何將其擴展為空?
假設我有一個腳本在做:
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 的 shell和Bash 具有
${parameter:+word}
:如果參數未設置或為空,則應替換為空;否則,應替換 word 的擴展(如果 word 省略,則為空字元串) 。
所以你可以這樣做:
${var1:+"$var1"}
並且已經過
var1
檢查,"$var1"
如果它已設置且非空(使用普通的雙引號規則),則可以使用它。否則它會擴展為空。請注意,這裡僅引用內部部分,而不是全部內容。這同樣適用於 zsh。你必須重複這個變數,所以它並不理想,但它完全符合你的要求。
如果您希望將設置但為空的變數擴展為空參數,請
${var1+"$var1"}
改用。