![不知道何时转义路径名中的元字符](https://linux22.com/image/29549/%E4%B8%8D%E7%9F%A5%E9%81%93%E4%BD%95%E6%97%B6%E8%BD%AC%E4%B9%89%E8%B7%AF%E5%BE%84%E5%90%8D%E4%B8%AD%E7%9A%84%E5%85%83%E5%AD%97%E7%AC%A6.png)
我很困惑在什么情况下需要转义路径名中的元字符。考虑以下示例:
我在以下工作目录中:
$ 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