頑張っていますwhile read
通事論わからないことがあります。
問題を再現する最も基本的なシナリオは次のとおりです。 bashスクリプトはa.sh
他のスクリプトを呼び出しb.sh
、そのスクリプトがエコーする行を表示します。
a.sh
#!/bin/bash while read line; do echo "<<$line>>" done <<< `./b.sh`
b.sh
#!/bin/bash echo "Hello" echo "World"
実行すると、b.sh
予想される結果が表示されます。
Hello
World
一方、 を実行すると、a.sh
出力は次のようになります。
<<Hello World>>
私はそれが次のようになると予想しましたが、
<<Hello>>
<<World>>
私は何が間違っていましたか?
ベストアンサー1
~から4.4-アルファと4.4-ベータ間のBash変更ログ:
[...]
この資料では、bash-4.4-beta バージョンと bash-4.4-alpha 以前のバージョン間の変更について詳しく説明します。
[...]
ジ。 ドキュメントで続けて言うように、Bashはもはやここで文字列拡張を分割しません。
これは私にとって多少曖昧ですが、bash
当時のソースコードに何が変更されても、次のような影響がありました。 Bash 4.4では、次のコマンドは次のようになります。
while read line; do
printf '<<%s>>\n' "$line"
done <<< $( printf '%s\n' hello world )
生産する
<<hello>>
<<world>>
いいえ
<<hello world>>
Bash 4.3に見られるように。