2007年12月 4日

[linux-users:107814] Re: シェルスクリプトへのファイル名の引渡し

結論を書くと grep .*txt は あるとまずいんじゃないのか…
実は必要なのだとしてもが shell に展開されないように
した方がいいという話です.

>> On Mon, 3 Dec 2007 23:14:34 +0900, "K.Moriyama" <mistletoe@xxxxx> said:

K> $ find . -type f -name '*.txt' | grep .*txt | xargs -e 実行ファイル名

1つ誤動作する例をあげます.

カレントディクレトリに hoge.txt と .hore.txt .soretxt が
あるとします.

しかも echo uso.hore.txt.naiyo > .soretxt しておきます.

このとき

1. find … -name '*.txt' は hoge.txt にのみマッチするので
echo hoge.txt と同じ動作になります.

2. grep .*txt は設定によりますがシェルに展開されて(順序によっては)
grep .hore.txt .soretxt になります.

結果として 実行されるのは (echo は それと同等の動作位の意味で)

% echo hoge.txt | grep .hore.txt .soretxt | xargs -e 実行ファイル
最初の echo に意味はなくて...

% grep .hore.txt .soretxt | xargs -e 実行ファイル

% echo uso.hore.txt.naiyo | xargs -e 実行ファイル

% 実行ファイル uso.hore.txt.naiyo

です. 意図した動作ですか?

.*txt を SHELL に展開されないようにすれば hoge.txt に対して
実行されます.

で, (私が)ねぼけている気もするんですが, grep '.*txt' は
find -name '*.txt' が真なら常に真なのでは?

grep '.*txt は「何かが0文字以上]txt にマッチするので

A.txt
A.txtB
AtxtB
.txtB
txt
.AtxtB
A.BtxtC

どれでも 真です

なので, 寝惚けてるんじゃなければ, grep は 邪魔だと思うわけです.
--
(ishi)

投稿者 xml-rpc : 2007年12月 4日 10:44
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/67217
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。