これまでで一番「情けなかったとき」はいつですか?

シェルでIFSでカンマ区切りの変数を読み込みたいのですが、変数の中に正規表現があると展開されてしまいます。
展開されないようにするにはどうしたら良いのでしょうか?

${line}のなかは、
111,222,aaa*.txt
のように入っています。

IFS=,
for str in ${line}
do
配列=${line}
.
.
.

宜しくお願い致します。

質問者からの補足コメント

  • 皆様、ご回答ありがとうございました。
    出先だった為、説明が不足しており申し訳ありませんでした。
    カンマ区切りのパラメータを受け取り子シェルに渡す、という処理をしたかったのですが、
    パラメータにaaa*.txtやaaa[0-9].txtなどの値が入ってきたときに、
    展開させず子シェル渡したいのですが、記載した方法だと、strのなかに展開された値が入ってしまうので、どうにか出来ないかと悩んでいました。
    子シェルの方で、受け取ったパラメータを展開したかったのです。
    ※配列=${str} の間違えです。

    パラメータは*や[]などが入ってくる仕様ですので、空のディレクトリで作業するとか、あらかじめクオートすると言った方法では解決できませんでした。
    ですが、IFSでカンマ区切りで読み込むのではなく、cutコマンドを使用して解決致しました。
    ありがとうございました。

      補足日時:2015/06/12 23:03

A 回答 (3件)

もしディレクトリに、aaa*.txtがなくファイルマッチが展開されないとした場合、どういう結果が欲しいのでしょうか?



>for str in ${line}
>do
>配列=${line}

str は使わない??何故forを使う??配列にはなにが入って欲しい??
    • good
    • 0

えぇっと, 「正規表現」じゃなくて「グロブ」だよ.



で展開されるのが嫌なら展開されないようにすればいい. ふつうはクォートする. 「どこで展開されるのか」は, 当然わかってるよね?
    • good
    • 0

1) 展開されなきゃいいんでしょ。


マッチするファイルを消しておく。
あるいは空のディレクトリで作業する。

2)もう少しまじめにやる
元の${line}を作る部分があるわけですよね。
その部分で展開されないようにクオートしておく。
    • good
    • 0

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


おすすめ情報