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 个参数的命令( 如预期的那样)?

时间: 原作者:

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']



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

原作者:
...