我想编写一个模拟 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
必须检查是否old
在PWD
。如果不在 中PWD
,则必须打印“错误替换”错误消息。我的问题是exit status
ofgrep
总是0
。所以 if 条件永远不会执行。
示例:
PWD="~/Documents/Code"
korn_cd aaaaa bbbbb
我没有看到错误消息“替换错误”。
我该如何解决?
您的问题是
old
永远不会设置,至少,不会在您发布的代码部分中设置。grep
搜索空字符串时将始终匹配""
,并返回零退出代码:在以下位置使用字符串比较会更有效
bash
:假设
$old
有一些价值(它没有在你的函数中设置,这是你的问题)。我认为您的功能的部分实现可能看起来像
(借用内置
zsh
相同功能的错误消息)cd
此函数不允许用户传递任何其他参数
cd
。要处理选项,您必须进行完整的命令行解析。忽略选项: