Bashスクリプトの変数に改行文字を追加する方法

Bashスクリプトの変数に改行文字を追加する方法

私がするとき

str="Hello World\n===========\n"

私も\n印刷しましたが、改行はどうですか?

答え1

bash構文を使用できます

str=$'Hello World\n===========\n'

aが前に続く一重引用符は、$エスケープシーケンスを文字列に挿入できる新しい構文です。

また、printf組み込みの結果出力を変数に保存できます。

printf -v str 'Hello World\n===========\n'

どちらのソリューションもサブシェルを必要としません。

以下の文字列を印刷する必要がある場合は、次の例のように二重引用符を使用する必要があります。

echo "$str"

引用符なしで文字列を印刷すると、改行文字が空白に変換されるためです。

答え2

Bourne / POSIXスタイルのシェルでは、単一引用符の中にリテラル改行文字を入れることができます。

str='Hello World
===========
'

複数行文字列の場合ここにファイルしばしば非常に便利です。この文字列はコマンドへの入力として使用されます。

mycommand <<'EOF'
Hello World
===========
EOF

文字列を変数に保存するには、catコマンドの置き換えにこのコマンドを使用します。文字列の末尾の改行は、コマンド置換によって削除されます。最後の改行を維持したい場合は、最後にストッパーを挟んで取り外してください。 POSIX準拠のシェルではstr=$(cat <<'EOF'); str=${str%a}heredocに従うことができますが、bashは閉じ括弧の前にheredocが現れるように要求します。

str=$(cat <<'EOF'
Hello World
===========
a
EOF
); str=${str%a}

ksh、bash、およびzshでは、引用$'…'符付きフォームを使用して、引用符内のバックスラッシュエスケープを拡張できます。

str=$'Hello World\n===========\n'

答え3

スクリプトに改行が複数回必要な場合は、改行を含むグローバル変数を宣言できます。これにより、二重引用符で囲まれた文字列内で使用できます(変数拡張)。

NL=$'\n'
str="Hello World${NL} and here is a variable $PATH ===========${NL}"

答え4

すべての議論でこれが私にとって最も簡単な方法です。

bash$ str="Hello World
==========="
bash$ echo "$str"
Hello World
===========

これエココマンドを使用する必要があります。二重引用符

関連情報