shell - 在 Bourne shell 中,转义将 shell 转义字符串转义为子命令

  显示原文与译文双语对照的内容
82 5

假设我有一个我想要运行( cmd )的命令,并且一个包含要传递给函数的变量的变量(--foo 'bar baz' qux) 。如下所示:

#!/bin/sh
command=cmd
args="--foo 'bar baz' qux"

参数包含引号,如上面所示,将包含空格的参数组合在一起。然后,我想运行以下命令:

$command $args

当然,这将导致使用 4 参数运行命令:--foo'barbaz'qux我用于( 例如,在使用 "$@" 时)的替代方法出现了一个不同的问题:

$command"$args"

这里命令使用一个命令行参数执行命令:--foo 'bar baz' qux

如何运行带有3 个参数的命令( 如预期的那样)?

时间:原作者:0个回答

136 5

一种可能性是使用 eval:

#!/bin/sh
args="--foo 'bar baz' qux"
cmd="python -c 'import sys; print sys.argv'"
eval $cmd $args

这样你就会导致 命令行 被解释,而不仅仅是根据 IFS 拆分。这给出了输出:

$./args.sh 
['-c', '--foo', 'bar baz', 'qux']

这样你就可以看到你想要的参数被传递。

原作者:
...