なぜbashは隣接するSPACEを1つに圧縮するのですか?


1
$ ourSite="super    user"
$ echo $outSite
super user
$ echo "$outSite"
super    user

変数の引用に二重引用符を使用しない場合、bashは隣接するSPACEを自動的に1つに圧縮します。

私はなぜbashがこのようにしたいのですか?その変数は単なる文字列であり、変数をデフォルトで元の値に置き換えたほうがよいのではないでしょうか?

回答:


5

ここでは圧縮は行われていません。あなたの例:

 echo $outSite

以下と同等です:

echo super    user

echoコマンドは、すべてのシェルコマンドと同様に、コマンドライン全体を表示しません。代わりに、シェルによって解析される引数の配列が表示されます。bash(1)で述べているように、コマンドライン引数は次の引数から1つ以上のスペースで区切られます。そのため、シェルはコマンドラインを解析するときに、引数を1つずつ引き出し、エコーに渡します。(echoは、概念的には1つのように動作するため、echoは別個のプログラムではないという事実をスキップします。)したがって、echoは、最初の引数「super」と2番目の引数「user」を認識し、いくつのスペースが分かれているかさえ知りません2つの引数。単一のスペース区切り文字で1つずつ印刷します。他のコマンド:

echo "$outSite"

とまったく同等

echo "super    user"

1つの引数を渡し、その引数にはスペースが埋め込まれており、エコーは素直に出力されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.