zshのzmv
コマンドで,正規表現を用いて失敗した(パターンがマッチしなかった)場合,セミコロンの後に他のコマンドを続けても実行されません.
具体的には(以下に(i)から(v)の5つありますが,問題の挙動は(iv)です),
sh
1autoload zmv 2alias mmv='noglob zmv -W' 3mkdir foo 4mkdir bar 5touch foo/hoge
とした後で
(i)
sh
1mmv foo/hoge bar/hoge ; echo $?
としたら,STDERRに
zmv: warning: no wildcards were found in search pattern zmv: warning: no wildcards were found in replacement pattern
STDOUTに0
と出ます.hogeはfooからbarに移っています.
(ii)
sh
1mmv foo/* bar/* ; echo $?
としたらSTDOUTに0
,STDERRには何も出力されません.hogeはfooからbarに移っています.
(iii)
sh
1mmv bar/hoge foo/hoge ; echo $?
としたらSTDERRに
zmv: warning: no wildcards were found in search pattern zmv: warning: no wildcards were found in replacement pattern
STDOUTに0
と出ます.hogeはfooのままです.
(iv)
sh
1mmv bar/* foo/* ; echo $?
としたらSTDERRに
zmv:239: no matches found: bar/(*)
と出ます.STDOUTには何も出力されません.hogeはfooのままです.最後に,
(v)
sh
1mmv bar/* foo/* 2echo $?
としたら,STDOUTに1
と出ます.後は(iv)と変わりません.
シェルスクリプトでは(v)のように書くか,find
の終了ステータスで分岐させればよいのであまり問題はないのですが,なぜこうなるのかが分からず,気になります.
詳しい方がいれば教えてほしいです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/13 14:23