Kornのcdコマンドをエミュレートするbashスクリプトを作成したいと思います。cd old new
これをPWDに置き換えてから、新しいディレクトリに入ろうとします。old
new
cd
スクリプトは次のとおりです。
#!/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条件では、grep
ifが真であることを確認する必要がありますold
。PWD
そうでない場合は、PWD
「無効な置換」エラーメッセージを印刷する必要があります。私の問題はexit status
常に。したがって、if条件は決して実行されません。grep
0
たとえば、
PWD="~/Documents/Code"
korn_cd aaaaa bbbbb
「交換エラー」というエラーメッセージは表示されません。
どうすれば解決できますか?
ベストアンサー1
問題は、old
少なくとも投稿したコード部分では設定されていないことです。 grep
空の文字列を検索すると、常に一致し、""
ゼロ終了コードが返されます。
$ echo $PWD | grep ""; echo $?
/home/jim
0