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

Why doesn't rm -rf "$somedir/*" work (only when quoted)?

为什么这个命令有效:

sudo rm -rf ${server_tomcatHomeDir}temp/*

虽然相同,但带引号的 arg 不起作用:

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

它可能只与引号有关,但为什么这个命令即使在带引号的参数下也能正常工作:

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

我听不懂。谁能澄清一下?

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

你必须把 * 放在引号外面,所以

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

这里的*是一个路径名扩展(glob)标记,它将匹配文件名中任意数量的字符(包括零),并且不是扩展当放在引号内时,它会按字面意思处理。

做:

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

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