如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?

Posted

技术标签:

【中文标题】如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?【英文标题】:How to run bash script inside another bash script where path has spaces? 【发布时间】:2021-08-28 00:49:44 【问题描述】:

您好,我正在尝试从另一个 bash 脚本中调用一个 bash 脚本。结构如下:

脚本一: a.sh

示例:

a.sh /Users/Desktop is this/

现在我想像这样在 b.sh 中运行 a.sh 脚本b:

b.sh <pass_a_path_with_spaces>

示例:

b.sh

path="/Users/Desktop\ is\ this/"
script_a="/Users/Desktop\ is\ this/a.sh"
source "$script_a" "$path"

但是当我运行它时,我得到了这个错误: /Users/Desktop\ is\ this/a.sh: 没有这样的文件或目录

谁能指出我哪里出错了?

谢谢!

【问题讨论】:

你在“双引号”。删除反斜杠:"/Users/Desktop is this/" 您是否考虑过使用Command Substitution 和相对路径?您可以使用 $() gnu.org/software/bash/manual/html_node/… 嵌套多个命令 @mugglewithastruggle:你做得过火了:要么 用反斜杠转义每个空格, 将字符串放在引号之间,而不是两者兼而有之。示例:path='/Users/Desktop is this'。小警告:我不会命名变量 path;也许有一天你会从 bash 切换到 zsh,而 path 在 zsh 中有特殊的含义。 【参考方案1】:

使用引号',因为这是横向的,并且单引号内的字符串在使用变量时不会更改。

例如, a.sh '/Users/桌面是这个/'

【讨论】:

【参考方案2】:

您需要在目录周围加上空格double quote 以保留目录名称,如下所示:

b.sh

  path=/Users/"Desktop is this"/
  script_a=/Users/"Desktop is this"/a.sh
  source "$script_a" "$path"

【讨论】:

以上是关于如何在路径有空格的另一个 bash 脚本中运行 bash 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

Shell 脚本中空格的使用

bash有空格的文件名

如何包含具有相对路径的 bash 脚本? [复制]

bash . source ./ 区别

用Shell打开文件路径及文件名有空格的文件方法

如何从shell脚本中的另一个目录获取文件的完整路径? [复制]