Bourne-Shell

Bourne shell:參數替換中的尾隨-運算符

  • August 21, 2018

我正在閱讀一個用於向某些程序添加進度條的 shell 腳本(在此處找到)。我無法理解此(可選)行:

#BAR_EXT=${BAR_EXT-}

評論說這將為每個文件添加一個副檔名,也許我只需要進一步閱讀,但我不熟悉 - 運算符的使用。

我知道這種替換,如Bash 參考手冊中所述:

${parameter:-word}

我也知道上面將替換parameterwith的空值word,而${parameter-word}不會。(至少,我想我知道這一點。)

但是在-這里之後沒有指定任何內容,我不確定發生了什麼。這會簡單地替換parameter為空值嗎?一般來說,我會接受這是一個可行的猜測並繼續閱讀,但評論中提到了向文件添加副檔名。

腳本是否包含命令set -u?這意味著

執行參數擴展時,將未設置的變數和特殊參數“@”和“*”以外的參數視為錯誤。如果嘗試對未設置的變數或參數進行擴展,shell 會列印一條錯誤消息,如果不是互動式的,則以非零狀態退出。

換句話說,如果$BAR_EXT沒有設置,比如

BAR_FILE="$BAR_FILE$BAR_EXT"

會失敗。命令

BAR_EXT=${BAR_EXT-}

$BAR_EXT如果根本沒有定義,將顯式設置為空字元串,從而避免此類錯誤。

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