我在某个位置有一些目录,该位置的绝对路径存储在 中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。幸运的是,解决方法是一样的:使用数组。