for文へのリストに”/*”とかが入ってしまうとき
2007年4月13日
shのシェルスクリプトの話です。
for文に渡すリストの各要素にシェルの特殊文字が入った場合の
エスケープの方法がわからないっす。
for文に渡すリストの各要素にシェルの特殊文字が入った場合の
エスケープの方法がわからないっす。
例えば以下のファイルがあったとして
--- cat.txt ---
/**
* COMMENTS
*/
src;
--- for.sh ---
#!/bin/sh
for i in `cat cat.txt`
do
echo "$i"
done
それで foo.sh を実行すると
for文に渡される最初の /** がシェルの特殊文字として動作するので
ルート以下のディレクトリ一覧が $i に入ってfor文でループしたりします。
for文に渡される最初の /** がシェルの特殊文字として動作するので
ルート以下のディレクトリ一覧が $i に入ってfor文でループしたりします。
かといって、”`cat cat.txt`”と全体をエスケープすると
今度は改行等がリストの切れ目として認識されずに、ループが1回しか行われません。
(これはこれで理由が良くわからないんだが)
$i に分解したタイミングでエスケープするのはどうすりゃいいんだろう?
畜生、2時間ぐらいはまってる、別言語を使えばよかった・・・。