【发布时间】:2020-03-22 20:20:23
【问题描述】:
我有一个 bash/shell 脚本,想将命令输出存储在一个变量(EXCLUDE_PATTERN)中,并且命令本身也包含变量(FOLDERS 和 BUPATH)。
此命令的目标是将变量 FOLDERS 中的空格替换为 " --exclude="$BUPATH 以用于 tar强>命令
如果在脚本中定义了以下变量:
FOLDERS='folder1 folder2 folder3'
BUPATH='/opt/mypath'
CONFIG_BACKUP="/storage/backup.tar.gz"
FOLDER 是一个包含排除文件夹列表的变量
BUPATH 是一个带路径的变量
现在我想用以下 tar 命令的模式定义一个变量 EXCLUDE_PATTERN(尝试了 2 个变体):
EXCLUDE_PATTERN=`echo $FOLDERS | sed 's/\ /" --exclude="$BUPATH\//g'`
EXCLUDE_PATTERN=`echo $FOLDERS | sed 's/\ /" --exclude="${BUPATH}\//g'`
然后脚本运行tar命令:
tar -C \"$BUPATH\" --exclude=\"$BUPATH/$EXCLUDE_PATTERN\" -czf \"$CONFIG_BACKUP\" .
似乎变量 EXCLUDE_PATTERN 无法识别 BUPATH 变量:
tar -C "/opt/mypath" --exclude="/opt/mypath/folder1" --exclude="${BUPATH}/folder2" --exclude="${BUPATH}/folder3" -czf "/storage/config.tar.gz" .
预期的命令应该是这样的:
tar -C "/opt/mypath" --exclude="/opt/mypath/folder1" --exclude="/opt/mypath/folder2" --exclude="/opt/mypath/folder3" -czf "/storage/config.tar.gz" .
我希望有人能帮我解决这个问题:)
【问题讨论】:
-
你为什么要转义那些双引号?
-
我也试过不带引号,但没有区别(更新)
-
为什么
\"逃避"?你真的有一个名为"的目录吗?cd ./\"有效吗?cd ./\"/opt/mypath有效吗?
标签: linux string bash shell variables