Bash
為什麼我觀察到不同的迴聲行為?
我觀察到迴聲的以下行為
#!/bin/bash x=" hello" echo $x echo "$x"
現在,當我執行上面的程式碼時,我得到
ronnie@ronnie:~$ bash test.sh hello hello ronnie@ronnie:~$
那麼,有人可以向我解釋為什麼
whitespace
在第一種情況下不存在於輸出中,並指出我定義了這種行為的文件。
這不是
echo
行為。這是一種 bash 行為。當您使用echo $x
表單 bash 獲取以下命令進行處理(␣
視為空格):echo␣␣hello
然後這個命令被標記化並且 bash 得到兩個標記:
echo
因此hello
輸出只是hello
當您使用
echo "$x"
表單時,bash 在 tokenizer 的輸入中具有以下內容:echo␣"␣hello"
因此它有兩個標記
echo
和␣hello
,所以輸出是不同的。
您看到不同輸出的原因是該
echo[1 space]Hello
行在語法上等於echo[5 spaces]Hello
. 空格被忽略,單詞 ‘Hello’ 被視為echo
. 第一行,最簡單的形式,就像你說的一樣echo "Hello"
。在第二行中,您已明確包含一個前導空格作為echo
, with的參數的一部分echo " Hello"
。在第一行中,您將一個 5 個字元的字元串傳遞給
echo
,在第二行中,您將一個 6 個字元的字元串傳遞給echo
。所以,事實上,
echo
在這兩種情況下的行為是相同的,只是傳遞給echo
改變的字元串。