![Bash 脚本到 tar – 引用问题](https://linux22.com/image/119637/Bash%20%E8%84%9A%E6%9C%AC%E5%88%B0%20tar%20%E2%80%93%20%E5%BC%95%E7%94%A8%E9%97%AE%E9%A2%98%20.png)
我有一个将文件名作为位置参数的脚本。我对它们执行一些操作,然后对它们进行 tar。目前我的脚本无法正常工作。回显线用于调试目的。
请澄清此声明
但是,当我尝试在脚本中使用 tar 时,是否可以归档我想要 tar 的文件。
片段
while [[ $# > 0 ]]; do
key="$1"
shift
files=$files" "\"${key}\"
done
echo tar -cvf backup.tar $files
tar -cvf backup.tar $files
输出:
tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
我在文件名(test.txt)周围使用双引号,因为我想处理带有空格的文件。
如果我要删除脚本中的引号 (\"),它会起作用,但我无法处理带有空格的文件名。
有任何想法吗?
答案1
如果您总是使用所有参数,那么只需tar
这样调用:tar -cvf backup.tar "$@"
。否则,如果您选择一个子集(尽管您没有显示它),则在数组中构建文件列表,如下所示:
declare -a files
while [[ $# > 0 ]]; do
key="$1"
shift
# assume some filtering goes on here
files+=("$key")
done
tar -cvf backup.tar "${files[@]}"