为什么这个引用不符合我的bash脚本?

时间:2013-10-23 14:48:19

标签: bash

我正在尝试使用此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)

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

1 个答案:

答案 0 :(得分:4)

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

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

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