bash:rsync转义单引号

时间:2015-10-07 15:30:46

标签: bash rsync quotes

我使用rsync从文件/目录名称中包含空格的服务器进行文件传输。使用单引号,我逃避空间,这是有效的

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""'"

2 个答案:

答案 0 :(得分:1)

要在bash中转义空间,您需要使用\反斜杠后跟空格。

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

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

注意:如果您在阅读输入时已经使用转义字符作为空格,则必须使用双引号。

答案 1 :(得分:0)

你是过分引用的。简单地引用参数扩展可确保精确值,空格和全部作为单个参数传递给rsync

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

原始示例中的单引号未传递给rsync;在将包含的字符串作为参数传递给rsync之前,它们将被shell删除。