带空格的 Bash 脚本变量

带空格的 Bash 脚本变量

我尝试编写一个 bash 脚本,用于将数据从一个文件夹复制到另一个文件夹。

Source="/My Images/"
Target=/Transfer/Media/
rsync -avu --progress $Source $Target

问题是,脚本找不到文件夹“/My Images/”,因为这两个单词之间有一个空格。

我如何告诉变量 Source 接受这个文件夹名称?

答案1

我如何告诉变量 Source 接受这个文件夹名称?

它没有分配该参数:

Source="/My Images/"

而是它的扩展:

rsync -avu --progress $Source $Target

看起来您已经知道,引用路径/字符串"/My Images/"对于处理其中的空格是必要的。

您还需要在命令中使用它时引用包含它的参数/变量,以防止 shell 进行分词,如下所示:

rsync -avu --progress "$Source" "$Target"

您应该养成在脚本中用双引号括住所有参数的习惯。

我假设您在同一台机器上本地使用rsync,但如果您使用它将文件同步到远程机器ssh,那么您可能需要双引号/转义...例如,参见:使用 scp 复制包含空格的远程文件需要双空格转义。为什么?

相关内容