我试图通过允许他们使用命令行选项指定环境变量来为我的用户提供配置层。这个配置实际上是一个包装器程序(run.sh
),它接收参数然后调用我的程序(program.sh
)。
我遇到了维护引文的参数问题,导致意外的参数传递。
以下是一个示例实现:
run.sh
exec `pwd`/program.sh ${CONFIG} "$@"
program.sh
for var in "$@"
do
echo "$var"
done
示例调用如下所示:
$> CONFIG='--foo="bar baz quo" --foo2="bar2 baz2"' ./run.sh hello abc123
--foo="bar
baz
quo"
--foo2="bar2
baz2"
hello
abc123
我希望输出如下:
--foo="bar baz quo"
--foo2="bar2 baz2"
hello
abc123
我尝试在qoutes中的run.sh中包装$ {CONFIG},但这只是--foo="bar baz quo" --foo2="bar2 baz2"
的一个参数。转义CONFIG
内的引文也会产生错误的结果。
答案 0 :(得分:0)
run.sh
eval exec `pwd`/program.sh "${CONFIG}" "$@"
program.sh
for var # The 'in "$@"' is not required, it is the default
do
echo "$var"
done
输出:
$ CONFIG='--foo="bar baz quo" --foo2="bar2 baz2"' ./run.sh hello
--foo=bar baz quo
--foo2=bar2 baz2
hello
请注意输出中的abc123
应该来自何处。