Ksh
腳本 - 未定義時忽略變數
HP-UX *** B.11.31 U ia64 **** 無限使用者許可證
var1=abc var2=xyz touch $var1 $var2 $var3
如果未設置變數之一,則命令失敗
ksh: var3: parameter not set
我們如何使命令忽略未設置/定義的變數並為已定義的變數創建文件。沒有 if 循環。就在觸摸命令內。謝謝
如果您
-u
通過呼叫ksh
asksh -u
orksh -o nounset
或執行set -u
or來打開該選項,您將收到該錯誤消息set -o nounset
。觸摸 $var1 $var2 $var3
無論如何都是錯誤的,除非這些變數旨在包含文件模式列表。
它應該是:
touch -- "$var1" "$var2" "$var3"
現在,如果您想允許其中一個為空,並且
touch
在這種情況下不將其作為空參數傳遞(並解決set -u
),您可以編寫:touch -- ${var1:+"$var1"} ${var2:+"$var2"} ${var3:+"$var3"}
另一種選擇是:
(IFS=; set -f +u; touch -- $var1 $var2 $var3)
使用
IFS=
,我們禁用分詞,使用set -f
萬用字元,但我們依賴於不引用變數的第三個副作用:空刪除。(而且我們還禁用nounset
了set +u
,所有這些都只在一個子shell中)。