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
文字列のみが変更されます。