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 に答える