1

我有一个 bash 脚本,它生成要执行的 SCP 命令。代码的相关部分如下所示:

echo $COPY_CMD
$COPY_CMD

我的输出如下所示:

rascher@localhost:~/Desktop/video_final$ ./xfervids.sh
scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/
rascher@192.168.1.101的密码:
"/media/My: 没有这样的文件或目录
Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": 没有那个文件或目录

但是,当我将输出的第 2 行:scp "/media/...复制并粘贴到终端时,它就可以工作了。

我究竟做错了什么?我曾尝试转义“我的书"My\ Book"\"My\\ Book"帮助?

4

2 回答 2

5

当路径名中有空格时,您必须非常小心。

在上下文中,您可能需要:

eval $COPY_CMD

这次您不需要在变量周围加上引号。

于 2009-12-29T03:39:51.993 回答
4

您应该阅读这篇关于如何以及为什么避免将命令放入变量的讨论以及关于eval.

您可能希望以这种方式使用变量的一个原因是记录或显示脚本执行的操作。正如您所发现的,能够正确引用或转义空格等会出现问题。执行您可能想要的操作的一种方法是在脚本中的各个点使用set -x并打开和set +x关闭这种类型的输出。

于 2009-12-29T08:29:14.843 回答