Bash

為什麼我觀察到不同的迴聲行為?

  • August 20, 2018

我觀察到迴聲的以下行為

#!/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改變的字元串。

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