落書き帖  古事記  いろは歌  日 記

readは標準入力から読み込むの?

2016年03月26日
まず初めに、これを読んでも答えは分かりません。
自分の為のメモです。

readコマンドの使い方を詳しく知らなかったので、ネット上で調べて簡単なシェルスクリプトを書いていました…。

echo tama | read a | echo $a

↑こんな感じ。
「readは標準入力から読み込んで変数に格納する」みたいな認識でいいのかな?
まぁそんな感じで認識して上の様なコードを試しに書いてみた訳なんです。
tamaをreadで変数aに格納して最後にechoで変数aの内容を出力。
でもこれ、変数aには何も格納されないんですよね。

何か私の認識に誤りがあるのかな?とか思いながら、調べてみるんですがよく分かりません…。
echoは標準出力に出力。
パイプ(|)は標準出力の内容を次の標準出力に渡す。
readは標準入力又はファイルディスクリプタから読み込み変数に格納。

組み込みコマンドのreadの項目には…、
「標準入力、 または -u オプションの引き数として指定されたファイル・ディスクリプター fd から 1 行を読み込み…」
って書いてます。

例えば、他のコマンドで標準入力から読み込むcatは想定通り動いてくれるんです。

echo tama | cat

↑catはパイプで受け取ったtamaを標準出力に出力してくれます。
どこか認識を間違ってるんだろうか?

readとcatは、パイプからだと受け取り方に違いが出るんだけど…、
ヒアドキュメントからだとどちらも同じように受け取るんですよね…。

/////

read a <<poti
tama
poti
echo $a

/////

cat <<poti
tama
poti

/////

↑こんな感じ。
そう言えば、前にも同じ事考えたような、そうでもないような…。