`echo $TEST` 在變數中擴展星號是一個錯誤嗎?

`echo $TEST` 在變數中擴展星號是一個錯誤嗎?

這是 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。預計其他作業系統上也是如此。

答案1

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

echo '*'

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

TEST=$(echo '*')

它將放入*變數中$TEST。然後當你

echo $TEST

全球將在這裡擴張。您可以透過執行最後一個命令,更改目錄,然後再次運行來驗證這一點。

*如果你說你會得到輸出

echo "$TEST"

正如所解釋的這裡,雙引號允許變數擴展,但阻止全域擴展。

相關內容