shell for循环中的rsync

shell for循环中的rsync,shell,for-loop,sh,rsync,Shell,For Loop,Sh,Rsync,我有这个shell脚本 #!/bin/sh PATHS=( a b c d ) for PATH in ${PATHS[@]} do rsync -avziP /home/user/$PATH $SERVER:$server_folder -b --backup-dir=$backup_folder/backup_$date --delete --exclude=.* --log-file=$HOME/rsync.log done 我总是会遇到这样的错误: rsync:找不到命令 让我抓

我有这个shell脚本

#!/bin/sh
PATHS=( a b c d )

for PATH in ${PATHS[@]}
do
  rsync -avziP /home/user/$PATH $SERVER:$server_folder -b --backup-dir=$backup_folder/backup_$date --delete --exclude=.* --log-file=$HOME/rsync.log
done
我总是会遇到这样的错误:

rsync:找不到命令


让我抓狂的是,如果我删除for循环,只需运行rsync命令,脚本就可以完美地工作

PATH
是一个保留变量

它是指定在何处搜索工具的变量(如
rsync


使用另一个变量名

顺便说一下,您正在使用数组(
${path[@]}
),这是bash唯一的特性。最好指定类似
#的内容/bin/bash
在您的shebang中,或者它迟早会爆炸-大多数Linux发行版倾向于删除bash作为默认的sh实现,BSD/Mac从来没有将bash作为sh。最佳实践是对任何不是环境变量或内置变量的东西使用小写变量名(
path
);这样可以避免错误地踩踏保留名称(如
PATH
)。
$ set | grep ^PATH=
PATH=/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games