
のための:
$hello="hello
> world"
echo
改行文字が印刷されないのはなぜですか?
echo -e $hello
しかし、引用符を追加しても$hello
大丈夫です。
$ echo "$hello"
hello
world
ANSI-C引用のためですか?echo -e
私が入力した改行文字を解釈してはいけませんか?
答え1
マニュアルページでは、bash
変数の内容に基づいて単語を分離する方法について説明しますIFS
。
噴射
シェルは、単語分割のために二重引用符内に表示されない引数拡張、コマンド置換、および算術拡張の結果をスキャンします。
シェルは各文字を
IFS
区切り文字として扱い、これらの文字をフィールド終端として使用して、他の拡張結果を単語に分割します。設定されていない場合、またはその値がデフォルトのIFS
場合、前の拡張結果の始まりと終わりのシーケンスは無視され、始まりまたは終わりではないIFS文字シーケンスは単語を区切るために使用されます。デフォルト以外の値を使用すると、空白文字が値(スペース文字)内にある限り、単語の先頭と末尾のスペースとタブのシーケンスは無視されます。空白以外の文字と隣接する空白文字はフィールドを区別します。空白文字シーケンスも区切り文字と見なされます。値が空の場合、単語分割は発生しません。<space><tab><newline>
<space>
<tab>
<newline>
IFS
IFS
IFS
IFS
IFS
IFS
IFS
IFS
明示的に空のパラメーター(
""
または)が保持されます。''
値のないパラメータ拡張により、暗黙的に引用されていないNULLパラメータは削除されます。値のないパラメータを二重引用符で拡張すると、空のパラメータが生成され保持されます。拡張が発生しない場合、分割は行われません。
bash
変数に二重引用符がない場合、変数は単語分割になり、hello
2world
つの異なるパラメータになりますecho
。echo
パラメータの間にスペースを入れます。