引用符付きのエコ改行

引用符付きのエコ改行

のための:

$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>IFSIFSIFSIFSIFSIFSIFSIFS

明示的に空のパラメーター(""または)が保持されます。''値のないパラメータ拡張により、暗黙的に引用されていないNULLパラメータは削除されます。値のないパラメータを二重引用符で拡張すると、空のパラメータが生成され保持されます。

拡張が発生しない場合、分割は行われません。

bash変数に二重引用符がない場合、変数は単語分割になり、hello2worldつの異なるパラメータになりますechoechoパラメータの間にスペースを入れます。

おすすめ記事