3

私が理解していない行動を観察し、誰かにそれを明らかにしてもらいたい.

2 つのスクリプトがあり、どちらも STDIN から読み取られます。

キーボードから一連の数字を読み取る ( 1 エンター 2 エンター 3 エンター ... )

スクリプト A は毎回「x」を出力します

#!/bin/bash

while read LINE 
do      
    echo "x"    # this happens everytime 
    echo $LINE  # this is the only different line
done

output:

1
x
1
2
x
2
3
x
3
4
x
4
5
x
5

スクリプト B は、最初に LINE を読み取ったときにのみ「x」を出力します。

#!/bin/bash

while read LINE 
do      
    echo "x"             # this happens only the first time
    awk '{print $LINE}'  # this is the only different line
done

output:

1
x
2
2
3
3
4
4
5
5

誰かがこれを説明できますか?

4

2 に答える 2

3

ループはまだ最初の繰り返しです。awkコマンドではなく、連続するすべての入力を読み取っていますread。このステートメントは、単一引用符内で展開されていないためawk、シェル変数の値も出力していません。LINEむしろ、awkその内部変数LINEが未定義であることを確認し、それを値 0 として扱います。次に、標準入力から読み取る行であるawkの値を出力します。$0

于 2013-05-15T18:21:56.010 に答える
2

awk が標準入力を制御しました。コマンドラインで次のように入力すると、何が起こるかがわかります。

awk '{print $LINE}'

ctrl-D は stdin を終了して awk し、while ループに戻ります。

于 2013-05-15T18:23:19.257 に答える