1

我正在尝试使用此 bash 脚本保存一些输入:

#!/usr/bin/env bash

n=$(($#-1))
files=${@:1:$n}
dest=${!#}
echo "$n files"
echo "${files[@]}"
echo "$dest"
rsync -av "${files[@]}" kyopti:$dest

请注意这"${files[@]}"部分,我这样做是因为在 Greg 的 bash 教程中推荐了它。这会产生一个错误:

rsync: link_stat "/tmp/scplot.pdf ssknplot.pdf" failed: No such file or directory (2)

但是,如果我删除引号,一切正常。我很困惑,这不应该是最好的做法,添加引号?

4

1 回答 1

4

files不是数组。它只是一个由空格分隔的位置参数列表组成的字符串。你要

files=( "${@:1:$n}" )

files然后,您在命令中引用的使用rsync将按预期工作。

于 2013-10-23T14:58:58.113 回答