我正在尝试用以下命令创建“/tmp/pwet/foo bar”:
DIR="/tmp/pwet/foo bar"
ARGS="-p ${DIR}"
mkdir $ARGS
出于集成原因,我必须将 ARGS 构建分两步进行: ARG = some_options + $DIR 此代码创建 2 个目录:/tmp/pwet/foo
和./bar
。这不是我想要的。
我尝试过很多逃避的事情,但没有结果。我用 bash 运行脚本。有什么好的解决办法呢?
答案1
问题不在于变量的内容(这就是为什么你可以尝试使用尽可能多的转义字符),而在于 bash 按$ARGS
字面意思替换变量内容,因此其中的空格将是实际的命令中的空格。
只需使用mkdir "$ARGS"
(即,将变量引用括在"
s 中)
更新:正如评论中所讨论的,为了使-p
和其他选项不成为目录名称的一部分,请定义 2 个变量:
OPTS="-p -whatever"
和
ARGS="/tmp/pwet/foo bar"
然后稍后像这样发出 mkdir :
mkdir $OPTS "$ARGS"
或者,如果您想使用转义字符完全控制它,并且可以拥有多个目录,有些带有空格,有些没有选项,全部混合在一起,您可以将整个命令放在一个变量中并使用 bash -c 执行它。
检查下面的示例作为您可以尝试的起点:
MKDIRCMD="mkdir -p \"A B\" \"C D\""
echo $MKDIRCMD # Notice the \ characters are NOT part of the string
bash -c "$MKDIRCMD"