我經常在使用自動工具(autoconf,automake)的項目的構建腳本中看到這種情況。當有人想要檢查shell變量的值時,他們經常使用以下慣用法:if test "x$SHELL_VAR" = "xyes"; then...與像這樣簡單地檢查值相比,這樣做有什么好處:if test $SHELL_VAR = "yes"; then...我認為一定有某種原因使我經常看到這種情況,但我無法弄清楚它是什么。
3 回答

慕慕森
TA貢獻1856條經驗 獲得超17個贊
如果您使用的是執行簡單替換的外殼,并且SHELL_VAR變量不存在(或為空),則需要注意邊緣情況。以下翻譯將發生:
if test $SHELL_VAR = yes; then --> if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then
由于test缺少第一個參數,第一個會產生錯誤。第二個沒有那個問題。
您的案例翻譯如下:
if test "x$SHELL_VAR" = "xyes"; then --> if test "x" = "xyes"; then
的x,至少對于符合POSIX的殼,實際上是多余的,因為引號隨之而來的是兩個空的參數和一個容納空間被解釋為單個對象。
- 3 回答
- 0 關注
- 1072 瀏覽
添加回答
舉報
0/150
提交
取消