• ベストアンサー

【シェルスクリプト】 for文で単語分割させたくない

シェルスクリプトの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 と単語分割されてしまいます。 空白を含んでいる場合に行単位で処理するにはどうすればよいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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 とやるのが普通です。

skip_jack
質問者

お礼

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

その他の回答 (1)

  • since1983
  • ベストアンサー率39% (33/84)
回答No.1

bashにはあまり詳しくないのですが、次のようにしてできないでしょうか? ------------------------------------- #!/bin/bash cat file | while read line do echo ${line} done -------------------------------------

skip_jack
質問者

お礼

ご回答ありがとうございます。 cat で流して while させると行単位で扱えますね。 これでできましたが、向学のために、for文で扱う方法をご存知でしたらまたお教えください。

関連するQ&A