将环境变量转换为脚本参数

时间:2016-03-28 16:14:52

标签: bash shell

我试图通过允许他们使用命令行选项指定环境变量来为我的用户提供配置层。这个配置实际上是一个包装器程序(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内的引文也会产生错误的结果。

1 个答案:

答案 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应该来自何处。

相关问题