whileループでこのドキュメント変数を使用してください。

whileループでこのドキュメント変数を使用してください。

ループでHere Document変数を使用する際に問題があります。なぜならこれがうまくいくからです。

while IFS= read -r line; do
  echo "(${line})"
done <<EOF
one
two
three
EOF

しかし、これはそうではありません

foo=<<EOF
one
two
three
EOF

while IFS= read -r line; do
  echo "(${line})"
done <<<"$foo"

今私はbashスクリプトが初めてです。頭の上に疑問符があるだけでなく、2番目の構文(ここではスクリプトの上部に記載されている)を維持し、何とか動作させる方法を知りたいです。

ご協力ありがとうございます。

ベストアンサー1

fooこれにより、変数が区切られた文書の内容に設定されなくなります。

foo=<<EOF
one
two
three
EOF

リダイレクトを使用した空の文字列の変数割り当て。これにより、何が起こっているのかをより明確にすることができます。

foo=""  <<EOF
one
two
three
EOF

しかし、実際にはheredocは必要ありません。ただし:

foo="one
two
three"

おすすめ記事