为什么rm -rf“$ somedir / *”不起作用(仅在引用时)?

时间:2016-10-06 20:03:42

标签: bash shell sh glob

为什么这个命令有效:

sudo rm -rf ${server_tomcatHomeDir}temp/*

虽然相同,但引用了arg,但不起作用:

sudo rm -rf "${server_tomcatHomeDir}temp/*"

它可能只与引号有关,但为什么这个命令即使用引用的args也可以工作:

sudo cp "$HOME/${artifact}" "${server_tomcatHomeDir}/webapps/${webapp}"

我无法理解。任何人都可以澄清吗?

我只想在第一个命令中使用引号来防止通配和分词。

2 个答案:

答案 0 :(得分:4)

*这里是一个路径名扩展(glob)令牌,它将匹配文件名中的任意数量的字符(包括零),当置于引号内时,扩展,它按字面意思处理。

执行:

sudo rm -rf "${server_tomcatHomeDir}"temp/*

请注意,引用变量几乎总是一个好主意,特别是在处理文件名以避免单词拆分和路径名扩展时。

答案 1 :(得分:2)

您必须将*放在引号之外,所以

sudo rm -rf "${server_tomcatHomeDir}temp/"*