Bash
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 上嘗試過。期望它在其他作業系統上會是一樣的。
不,這不是錯誤。你已經證明了
echo '*'
將產生一個文字
*
. 因此,當您替換此輸出時,按照以下命令TEST=$(echo '*')
它將放入
*
變數$TEST
中。那麼當你echo $TEST
glob 將在這裡擴展。您可以通過執行最後一個命令、更改目錄然後再次執行來驗證這一點。
如果你說,你會得到
*
輸出echo "$TEST"
如此處所解釋的,雙引號允許擴展變數,但防止全域擴展。