dポイントプレゼントキャンペーン実施中!

シェルスクリプトのfor文で単語分割させないで、一行ずつ処理させるにはどうすればよいのでしょうか。

----------
$ ca file
test1 test1
test2 test2
test3 test3
----------
#!/bin/bash
for i in `cat file`
do
echo $i
done
----------
「test1 test1」、「test2 test2」、「test3 test3」といった具合に、行単位で処理したいです。
しかし結果は
test1
test1
test2
test2
test3
test3
と単語分割されてしまいます。
空白を含んでいる場合に行単位で処理するにはどうすればよいのでしょうか。

A 回答 (2件)

セパレータはIFSで指定します。

デフォルトは、空白・タブ・改行です。

#!/bin/bash
IFS=$'\n'
for i in `cat file`
do
IFS=$' \t\n'
echo $i
done

while read i;do echo $i;done < file とやるのが普通です。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
セパレータについての知識がありませんでした。
大変勉強になりました。

お礼日時:2007/02/28 18:55

bashにはあまり詳しくないのですが、次のようにしてできないでしょうか?


-------------------------------------
#!/bin/bash

cat file | while read line
do
echo ${line}
done
-------------------------------------
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
cat で流して while させると行単位で扱えますね。

これでできましたが、向学のために、for文で扱う方法をご存知でしたらまたお教えください。

お礼日時:2007/02/28 02:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!