grep は if ステートメントで常に 0 終了状態で終了します。

grep は if ステートメントで常に 0 終了状態で終了します。

Kornのcdコマンドをエミュレートするbashスクリプトを作成したいと思います。cd old new これをPWDに置き換えてから、新しいディレクトリに入ろうとします。oldnewcd

スクリプトは次のとおりです。

#!/usr/bin/env bash

function korn_cd
{
  case "$#" in
    0 | 1 ) builtin cd $1 ;;
    2     )  if ! echo "$PWD" | grep "$old" ; then
              echo "bash: cd: bad subsitiution";
              return 1;
            fi;

            new_dir=${PWD//$1/$2};
            builtin cd $new_dir; ;;
    *    ) echo "bash: cd: wrong arg count" 1>&2; return 1 ;;
  esac ;
}

if条件では、grepifが真であることを確認する必要がありますoldPWDそうでない場合は、PWD「無効な置換」エラーメッセージを印刷する必要があります。私の問題はexit status常に。したがって、if条件は決して実行されません。grep0

たとえば、

PWD="~/Documents/Code"
korn_cd aaaaa bbbbb

「交換エラー」というエラーメッセージは表示されません。

どうすれば解決できますか?

ベストアンサー1

問題は、old少なくとも投稿したコード部分では設定されていないことです。 grep空の文字列を検索すると、常に一致し、""ゼロ終了コードが返されます。

$ echo $PWD | grep ""; echo $?
/home/jim
0

おすすめ記事