【问题标题】:How do I use a variable containing a filename with spaces in a bash script?如何在 bash 脚本中使用包含带空格的文件名的变量?
【发布时间】:2011-10-14 11:53:21
【问题描述】:

我在 OS X 上运行了一个简单的 bash 脚本,它可以删除特定的文件和目录,并在它们的位置复制新的。一个 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 " 没有尾随空格吗?

标签: bash filenames spaces cp


【解决方案1】:

你有一个额外的空间,很简单

“$NEWAPP”

【讨论】:

  • 哇,这是以前更改的产物,我没有注意到。改变这个肯定解决了一些问题,以及下面出现的评论。谢谢你们俩。
【解决方案2】:

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

"$CP $NEWAPP $INSTALL_DIR$NEWAPP"

这里不需要一直打开和关闭引号,并且$CP必须包含在引号中,因为CP中有空格。

【讨论】:

  • 不。它实际上试图执行一个命令,其名称是所有被替换的变量。此外,引号中的 cp 将尝试执行名称为“cp -Rf”的命令。引号中的所有内容都被解释为一个元素。第一个元素是命令的名称,其余是参数。
  • 你是对的,对不起。最终的 $NEWAPP 应该是 $APP 但是,否则它将尝试再次附加 $HOME/Downloads。
  • emergence -- 你的评论是正确的;我没有注意到我写了 NEWAPP vs APP。这与删除空间相结合,似乎工作得很好。两个愚蠢的错误一起工作。感谢您的帮助。
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2011-02-12
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多