【发布时间】:2013-10-01 12:31:02
【问题描述】:
我尝试在变量中构建一组参数并将其传递给脚本,但行为与我的预期不同。
test.sh
#!/bin/bash
for var in "$@"; do
echo "$var"
done
输入
usr@host$ ARGS="-a \"arg one\" -b \"arg two\""
usr@host$ ./test.sh $ARGS
输出
-a
"arg
one"
-b
"arg
two"
预期
-a
arg one
-b
arg two
请注意,如果您将引用的参数直接传递给它可以工作的脚本。我也可以使用 eval 解决这个问题,但我想了解第一种方法失败的原因。
解决方法
ARGS="./test.sh -a "arg one" -b "arg two""
eval $ARGS
【问题讨论】:
-
仅供参考,
for var in "$@; do"与for var; do相同。 -
eval 不是一种变通方法,它是这样做的方法。
-
@EranBen-Natan,使用
evalcompromises security。它完全不适合数据不是由至少与软件开发人员一样受信任的人手写的情况。
标签: bash escaping command-line-arguments quotes