エコーの他の動作を観察するのはなぜですか?

エコーの他の動作を観察するのはなぜですか?

echoの次の動作を観察しました

#!/bin/bash

x=" hello"

echo $x
echo "$x"

さて、上記のコードを実行すると

ronnie@ronnie:~$ bash test.sh
hello
 hello
ronnie@ronnie:~$

したがって、誰かがこれが最初のケースの出力に表示されない理由を説明し、whitespaceこの動作を定義する文書を教えてもらえますか?

答え1

これは行動ではありませんecho。これはバッシュ動作です。 Bashフォームを使用している場合は、echo $x次のコマンドを使用して処理(スペースで処理)します。

echo␣␣hello

その後、このコマンドはトークン化され、bashは2つのトークンを取得します。echoしたがって、hello出力は次のようになります。hello

このフォームを使用すると、echo "$x"bashはトルクナイザーの入力に次のようになります。

echo␣"␣hello"

echoしたがって、2つのトークンがあるため、␣hello出力は異なります。

答え2

他の出力が表示されるのは、その行が構文的echo[1 space]Helloに同じであるためですecho[5 spaces]Hello。スペースは無視され、「Hello」という単語は引数として扱われますecho。最も単純な形式の最初の行は、あなたが言うものと非常によく似ていますecho "Hello"。 2行目では、echoの引数の一部として先行スペースを明示的に含めましたecho " Hello"

最初の行は5文字の文字列をに渡しecho、2行目は6文字の文字列をに渡しますecho

したがって、実際にはecho両方の場合の動作は同じで、渡されたecho文字列のみが変更されます。

関連情報