質問: 現象 --- Windowsでgitを使う中で、git for windowsのシェル内でシェルスクリプトを回して処理を行っていたのですが、Windowsをリカバリして再インストールしたところでうまく動かなくなってしまいました。 原因を追いかけていったところ、以下のような部分が問題となっていそうだと判明しました(再現する範囲でソースは書き換えています)。 ``` #!/bin/bash set -e # 中略 for FILE in `find (後略)` do # 次の行で死ぬ ORIG_FILE=`echo $FILE | sed -e 's/\.gz$//'` if ! [ -f "${ORIG_FILE}" ] ; then # 略 fi done ``` `find`が正常に動作しているのは確認しましたし、`$FILE`にも値は来ています。`echo $FILE | sed -e 's/\.gz$//'`も、単体で実行した時は正常に動作しました。ところが、変数代入しようとするとここで止まって、`$?`は127という値となっていました。 怪我の功名で、bashだと`${FILE/\.gz$/}`のような形でsedを使わずに動くことが判明したので、実用的には一件落着となりました。ただ、もとのコードがなぜ動かなかったのか判然としないのも気持ち悪いので、改めて質問する次第です。 質問内容 ----- * 上の書き方で動かないのは環境要因なのか、書き方の問題なのか * bash拡張を使わずにきちんと動かすにはどうすればいいのか 環境情報 ----- * Windows 7 x64 * シェル環境...git version 2.9.2.windows.1付属のGit bash(MinGW64系) * `uname -a`の結果 `MINGW64_NT-6.1 (PC名) 2.5.0(0.295/5/3) 2016-03-31 18:47 x86_64 Msys` * `which sed`や`which echo`の先は`/usr/bin/***`
回答: 次のようにするとどうでしょうか。 ``` ORIG_FILE=`echo $FILE | sed -e 's/\\.gz\$//'` ```