如何在Bash脚本中使用包含空格的文件名变量?

5

我有一个简单的bash脚本在OS X上运行,它删除特定的文件和目录,并复制新的文件来代替。 一些Mac .app目录包含空格,在运行脚本时会出现“无此文件或目录”错误。

以下是相关代码。已经省略了很多内容,因此不能简单地将它们硬编码(变量必须按照它们的方式进行拆分):

CP="cp -Rf"

INSTALL_DIR="/Applications/"

APP="The App.app"

NEWAPP="$HOME/Downloads/The App.app"

$CP "$NEWAPP " "$INSTALL_DIR$NEWAPP"

我尝试过转义The\ App.app,单引号、双引号以及双重转义等方法,但都没有成功。我想应该有一种简单的方法可以解决这个问题。
谢谢你的帮助。

你不想要 "$NEWAPP " 吗?但是末尾的空格呢? - Blagovest Buyukliev
2个回答

7
你在那里多了一个空格,应该是这样的:

"$NEWAPP"


哇,那是之前更改的一个遗留问题,我没有注意到。更改这个肯定修复了一些问题,以及下面 Emergence 的评论。谢谢你们两个。 - nick

-2

将整个最终行用引号括起来:

"$CP $NEWAPP $INSTALL_DIR$NEWAPP"

这里不必一直打开和关闭引号,而且$CP必须用引号括起来,因为它包含一个空格。


4
不行。实际上这会尝试执行所有变量替换后的命令名称。另外,双引号中的“cp”将尝试执行名称为“cp -Rf”的命令。双引号中的所有内容都被解释为一个元素。第一个元素是命令的名称,其余是参数。 - Karoly Horvath
2
你是对的,抱歉。最终的$NEWAPP应该是$APP,否则它会再次尝试附加$HOME/Downloads。 - emergence
出现 - 你的评论是正确的;我没有注意到我写了NEWAPP而不是APP。这个错误再加上去掉空格,似乎很好地解决了。两个愚蠢的错误一起发挥作用。感谢你的帮助。 - nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接