ここで、文字列コマンド置換はなぜ1行として扱われますか?

ここで、文字列コマンド置換はなぜ1行として扱われますか?

頑張っています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に見られるように。

おすすめ記事