tar:当将参数作为 shell 变量时,“无法统计”

tar:当将参数作为 shell 变量时,“无法统计”

我在某个位置有一些目录,该位置的绝对路径存储在 中PROJECT_HOME。现在,我尝试在脚本中执行以下操作:

TARGET_LIST="bin lib scripts deployment"
tar -czf project.tar.gz -C "$PROJECT_HOME" "$TARGET_LIST"

但 tar 给出了以下信息:

tar: bin lib scripts deployment: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors

TARGET_LIST如果我替换( )的值,tar 命令就会起作用tar -czf project.tar.gz -C "$PROJECT_HOME" lib bin scripts deployment,但是当我使用变量时,它就不会起作用。

我究竟做错了什么?

答案1

通过$TARGET_LIST在引号之间放置,您可以定义一个带有空格的单个参数。tar 正在寻找名为“bin lib scripts deploy”的单个文件/文件夹。

尝试

tar -czf project.tar.gz -C $PROJECT_HOME $TARGET_LIST

不带引号

编辑 如果你的文件或目录名称中有空格,则需要使用数组(按照 Ignacio 的建议)

例子

TARGET_LIST=(bin lib scripts deployment "a directory with spaces")
tar -czf project.tar.gz -C $PROJECT_HOME "${TARGET_LIST[@]}"

答案2

您遇到的问题与BASH 常见问题解答条目 #50。幸运的是,解决方法是一样的:使用数组。

相关内容