bash: rsync 转义单引号

bash: rsync escape single quote

我使用 rsync 从 files/directories 名称中包含 space 的服务器进行文件传输。使用单引号,我转义 space 并且这有效

rsync -svaz --progress 'root@192.168.1.2:/folder with space' '/downloads'

我正在尝试为此编写一个 bash 脚本,但没有成功,根据 this 线程,可以通过将单引号放在双引号下来转义单引号。下面看起来不错

#!/bin/bash    
read -e -p "source path: " SOURCEPATH
read -e -p "destination path: " DESPATH
echo "rsync -svaz --progress" "'""$SOURCEPATH""'" "'""$DESPATH""'"

但是不行

#!/bin/bash 
read -e -p "source path: " SOURCEPATH
read -e -p "destination path: " DESPATH
rsync -svaz --progress "'""$SOURCEPATH""'" "'""$DESPATH""'"

你夸大了。简单地引用参数扩展可确保将确切的值、空格和所有内容作为单个参数传递给 rsync:

rsync -svaz --progress "$SOURCEPATH" "$DESPATH"

原始示例中的单引号未传递给 rsync;在将封闭的字符串作为参数传递给 rsync.

之前,它们被 shell 删除

要在 bash 中转义 space,您需要使用 \ 它的反斜杠后跟 space。

如果您正在阅读来自其他来源的输入,那么只需输入引号(单引号或双引号)即可。

rsync -svaz --progress "$SOURCEPATH" "$DESPATH"

注意:如果您在读取输入时已经在 space 中使用了转义字符,那么您必须使用双引号。