\ nを区切り文字として使用して変数にデータを追加するには?

\ nを区切り文字として使用して変数にデータを追加するには?

改行文字は、引用符の中に表示されても失われたように見えます。

foo=
for i in 1 2 3; do
    foo="$foo$(printf '\n')$i"
done

echo "$foo"
123

実際には、\n最初の要素の前にaを追加したくないので、代わりにaを使用しますが、${foo:+$(printf '\n')}まず上記のコードが機能しない理由を理解する必要があります。

ベストアンサー1

コマンド置換は末尾の改行文字を削除するため、空の文字列$(printf '\n')と同じです。$(printf '\n\n\n\n')

文字列に改行文字を含めるには、一重引用符または二重引用符の間に入れます。

for i in 1 2 3; do
  foo="$foo
$i"
done

改行文字を格納するために変数を定義することはあまり醜くないことがわかります。

nl='
'
for i in 1 2 3; do
  foo="$foo$nl$i"
done

ksh93、bash、FreeBSD sh、mksh、zshではまだ通常のshではありませんが、バックスラッシュエスケープを許可するドルの単一引用符を使用することもできます。

for i in 1 2 3; do
  foo="$foo"$'\n'"$i"
done

おすすめ記事