Bourne-ShellBourne shell:參數替換中的尾隨
Bourne shell:參數替換中的尾隨-
運算符
我正在閱讀一個用於向某些程序添加進度條的 shell 腳本(在此處找到)。我無法理解此(可選)行:
#BAR_EXT=${BAR_EXT-}
評論說這將為每個文件添加一個副檔名,也許我只需要進一步閱讀,但我不熟悉 - 運算符的使用。
我知道這種替換,如Bash 參考手冊中所述:
${parameter:-word}
我也知道上面將替換
parameter
with的空值word
,而${parameter-word}
不會。(至少,我想我知道這一點。)但是在
-
這里之後沒有指定任何內容,我不確定發生了什麼。這會簡單地替換parameter
為空值嗎?一般來說,我會接受這是一個可行的猜測並繼續閱讀,但評論中提到了向文件添加副檔名。
腳本是否包含命令
set -u
?這意味著執行參數擴展時,將未設置的變數和特殊參數“@”和“*”以外的參數視為錯誤。如果嘗試對未設置的變數或參數進行擴展,shell 會列印一條錯誤消息,如果不是互動式的,則以非零狀態退出。
換句話說,如果
$BAR_EXT
沒有設置,比如BAR_FILE="$BAR_FILE$BAR_EXT"
會失敗。命令
BAR_EXT=${BAR_EXT-}
$BAR_EXT
如果根本沒有定義,將顯式設置為空字元串,從而避免此類錯誤。