Ksh

腳本 - 未定義時忽略變數

  • February 13, 2015

HP-UX *** B.11.31 U ia64 **** 無限使用者許可證

var1=abc
var2=xyz
touch $var1 $var2 $var3

如果未設置變數之一,則命令失敗

ksh: var3: parameter not set

我們如何使命令忽略未設置/定義的變數並為已定義的變數創建文件。沒有 if 循環。就在觸摸命令內。謝謝

如果您-u通過呼叫kshas ksh -uorksh -o nounset或執行set -uor來打開該選項,您將收到該錯誤消息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萬用字元,但我們依賴於不引用變數的第三個副作用:空刪除。(而且我們還禁用nounsetset +u​​ ,所有這些都只在一個子shell中)。

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