這是 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"
正如所解釋的這裡,雙引號允許變數擴展,但阻止全域擴展。