Linux 如何将源路径和目标路径作为变量传递给rsync

Linux 如何将源路径和目标路径作为变量传递给rsync,linux,bash,rsync,Linux,Bash,Rsync,我正在编写一个bash脚本,使用rsync将文件从本地计算机复制到远程服务器。我的本地计算机上的文件夹名“本地文件夹”中有一个空格;我不知道这是否有什么区别 如果我把它写成纯文本,它就会起作用: rsync -arv --filter=":- .gitignore" /local\ folder/path/ user@123.4.5.6:~/ 我想把源路径和目标路径作为变量,但我无法让它工作。我尝试的第一件事是: SOURCE="/local\ folder/path/" DESTINATI

我正在编写一个bash脚本,使用rsync将文件从本地计算机复制到远程服务器。我的本地计算机上的文件夹名“本地文件夹”中有一个空格;我不知道这是否有什么区别

如果我把它写成纯文本,它就会起作用:

rsync -arv  --filter=":- .gitignore" /local\ folder/path/ user@123.4.5.6:~/
我想把源路径和目标路径作为变量,但我无法让它工作。我尝试的第一件事是:

SOURCE="/local\ folder/path/"
DESTINATION="user@123.4.5.6:~/"
rsync -arv  --filter=":- .gitignore" $SOURCE $DESTINATION
我看到这个错误:

rsync: change_dir "/local folder/path//~" failed: No such file or directory (2)
似乎是a)同时运行源和目标,b)看不到服务器地址

我尝试了许多变体,包括大括号:

rsync -arv  --filter=":- .gitignore" ${SOURCE} ${DESTINATION}
使用引号:

rsync -arv  --filter=":- .gitignore" "${SOURCE}" "${DESTINATION}"
并将选项放入数组中:

OPTIONS=( --protect-args -arv --filter=":- .gitignore")
rsync "${OPTIONS[@]}" ${SOURCE} ${DESTINATION}
我在登记后也试过了

而且:

#!/bin/bash

SOURCE="/folder\ name/path"
DESTINATION=user@123.4.5.6:~/

rsync -arv  --filter=":- .gitignore" "$SOURCE" $DESTINATION
每次我都会犯同样的错误。我错过了什么简单的东西?我看了各种例子,包括:

空间不是问题,或者至少不是唯一的问题。我已经尝试按照建议在变量名周围使用双引号


谢谢

您需要引用您的变量:尝试

rsync -arv  --filter=":- .gitignore" "$SOURCE" "$DESTINATION"

您提供的代码将生成。另请参见,(U&L.SE),(SO),(AskU)等报价<代码>“$SOURCE”——这将在链接到中告诉您。(首先,并不是说为您自己的变量使用所有caps名称是一种好形式——POSIX限制操作系统和内置POSIX指定的实用程序仅使用所有caps名称供自己使用,保留小写名称供应用程序使用,而不会产生意外冲突). 请参阅第四段,记住shell和环境变量共享一个名称空间。感谢您的建议,但到目前为止还没有任何效果。我不确定空间是不是问题。为什么远程服务器名称没有显示在错误中?(顺便说一句,我对将其描述为“答案”有一点疑问——如果您在扩展时修复了波浪号的引号而不是缺少的引号,您仍然会将
/local folder/
分解为两个参数,
/local
folder/
).NMDV,但是请注意中的“回答好的问题”部分,以及其中关于“以前已经被问过并回答过很多次”的要点。谢谢,我尝试添加了引号,这没有任何区别。我注意到了我在问题中尝试的额外内容。
rsync -arv  --filter=":- .gitignore" "$SOURCE" "$DESTINATION"