質問: ### 前提 下記参考シェルスクリプト1を実行すると、変数aには1、bには2、cには3、dには4が代入されるのがわかります。 ただ参考シェルスクリプト2のように、標準出力した値を代入する変数をaだけにしても、結果は参考シェルスクリプト1とかわりがありません。 ### 質問内容 ここで質問です。 * 1 標準出力された値を変数に代入する時、何を区切りとして変数に代入されているのか(参考シェルスクリプト1を見る限り、半角スペースで区切られて各変数に代入されていると思ったけど、参考シェルスクリプト2をみると半角スペースで区切られているのに1つの変数に代入されているので...) * 2 参考シェルスクリプト3のように、echoの途中で改行を入れると、 実行結果も2行に渡ります。 これはWhile文のループ処理は、標準出力1行単位ごとに行われていることを表しているということでしょうか 長々となってしまいましたがよろしくお願いします。 ### 参考 <参考シェルスクリプト1> '#!/bin/bash echo '1 2 3 4' | while read a b c d ; do echo RESULT : $a $b $c $d done <参考シェルスクリプト1実行結果> RESULT : 1 2 3 4 <参考シェルスクリプト2> '#!/bin/bash echo '1 2 3 4' | while read a ; do echo RESULT : $a done <参考シェルスクリプト2実行結果> RESULT : 1 2 3 4 <参考シェルスクリプト3> '#!/bin/bash echo '1 2 3 4' | while read a ; do echo RESULT : $a done <参考シェルスクリプト3実行結果> RESULT : 1 2 3 RESULT : 4
回答: 空白で区切ってますね。 以下を試してみてください。 !/bin/bash ========== echo '1 2 3 4' | while read a b c ; do echo $a echo $b echo $c done ふたつめの質問は、その通りです。 readは一行読み込んで、内容を指定された変数に入れます。