Bash

echo $TEST 擴展變數中的星號是否是錯誤?

  • June 3, 2019

這是一個 Bash 錯誤嗎?

$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file

為什麼第二個輸出解析*為(所有)文件名,而不僅僅是文字*輸出?看起來像 Bash 中的錯誤?

在 Ubuntu 18.04、bash 版本 4.4.19(1)-release 上嘗試過。期望它在其他作業系統上會是一樣的。

不,這不是錯誤。你已經證明了

echo '*'

將產生一個文字*. 因此,當您替換此輸出時,按照以下命令

TEST=$(echo '*')

它將放入*變數$TEST中。那麼當你

echo $TEST

glob 將在這裡擴展。您可以通過執行最後一個命令、更改目錄然後再次執行來驗證這一點。

如果你說,你會得到*輸出

echo "$TEST"

如此處所解釋,雙引號允許擴展變數,但防止全域擴展。

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