0

test.txt:

1 1
2 2
3 3

test.sh:

for ln in $(head -3 test.txt)
do
    echo "New line: $ln";
done

私は期待します:

New line: 1 1
New line: 2 2
New line: 3 3

...しかし、出力は次のとおりです。

New line: 1
New line: 1
New line: 2
New line: 2
New line: 3
New line: 3

変更:

"$(head -3 test.txt)"

...次につながる:

New line: 1 1
2 2
3 3

それの何がいけないの?明らかに、スペースが問題です。簡単な回避策はありますか?よろしくお願いします。

4

1 に答える 1

4

行ごとに読みたい場合は、これを試してください:

head -3 test.txt | while read line; do
  echo $line
done

一般に、シェルは空白を使用して物事をトークン化するため、これを行うと:

for ln in $(head -3 test.txt)

最終的には次のようになります。

for ln in 1 1 2 2 3 3

...これが、取得した出力を取得する理由です。

于 2012-05-10T20:21:27.930 に答える