私がするとき
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
===========
これエココマンドを使用する必要があります。二重引用符。