不知道何时转义路径名中的元字符

不知道何时转义路径名中的元字符

我很困惑在什么情况下需要转义路径名中的元字符。考虑以下示例:

我在以下工作目录中:

$ echo $PWD
/home/helpermethod/foo[b]ar/foo/bar

现在我想把后面的一切都剥掉foo[b]ar。我正在使用参数替换来执行此任务:/home/helpermethod/foo[b]ar

$ path=$PWD
$ basename=foo[b]ar
$ stripped_path=${path%$basename/*}/$basename

这似乎不起作用,因为需要正确转义基本名称字符串:

$ basename=foo\[b\]ar
$ stripped_path=${path%$basename/*}/$basename

好的,现在我找到了stripped_path我正在寻找的东西

$ echo "$stripped_path"
/home/helpermethod/foo[b]ar

但如果我现在测试这是否是一个有效的目录

$ [[ -d $stripped_path ]]

test命令始终返回 false(即返回值!= 0)。这里有什么问题?我需要取消转义吗stripped_path

答案1

stripped_path=${path%"$basename"/*}/$basename

使用双引号进行文字字符串匹配而不是模式匹配。需要引用变量的情况之一。另一种情况是在你的:

echo $PWD

上面应该是:

echo "$PWD"

或者甚至更好:

printf '%s\n' "$PWD"

或者

pwd

相关内容