• ベストアンサー

シェルスクリプトにおけるreadコマンドについて

シェルから読み込まれる"param_file"において、 A B といった途中に空白を含む行が存在する場合、 while read PARAM if [ $1 = ${PARAM} ] then break fi done < "param_file" を実行すると if文実行時に "too many arguments"エラーが発生します。 Solalis上で同じ処理を実行してもエラーが 発生ませんが、Linux特有なのでしょうか。

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

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

if の前に do がないのは単なる誤植でしょうか? それはさておき、ファイルから read を使用して読み込む場合、1行ずつ取り出されるので、「A B」という行があれば、「A」と「B」として順に取り出されるのではなく、「A B」として取り出されるでしょう。 if [ $1 = ${PARAM} ] とあった場合に、 if [ $1 = "${PARAM}" ] としてくれるかどうかは実装に依存するところだと思います。(OS の問題ではなく、あくまでシェルの問題) ただ、コーディングとしてはどのような実装でも問題がないように後者 (ダブル・クォーテーションあり) を用いるべきだと思います。 Linux のシェルは通常は bash です。Solaris にも最近のリリースでは bash が標準でインストールされていると思うので、シェルを切り替えて試してみると実装の違いがよく分かるかと思います。

taka394
質問者

お礼

ありがとうございました。

関連するQ&A