擅长:python、mysql、java
<p>在研究这个和相关的问题时,我很惊讶没有人提到使用显式子shell。对于bash和其他现代shell,可以显式地执行命令行。在bash中,它需要-c选项。</p>
<pre><code>argumentString="-ir 'hello world'"
bash -c "grep $argumentString ."
</code></pre>
<p>完全符合最初提问者的要求。这种技术有两个限制:</p>
<ol>
<li>只能在命令或参数字符串中使用单引号。</li>
<li>只有导出的环境变量才可用于该命令</li>
</ol>
<p>此外,此技术还处理重定向和管道,其他外壳也可以工作。您还可以使用bash内部命令以及在命令行中工作的任何其他命令,因为您实际上是要求子shell bash将其直接解释为命令行。这里有一个更复杂的例子,一个有点复杂的l s-l变体。</p>
<pre><code>cmd="prefix=`pwd` && ls | xargs -n 1 echo \'In $prefix:\'"
bash -c "$cmd"
</code></pre>
<p>我用这种方法和参数数组构建了命令处理器。一般来说,这种方式编写和调试要容易得多,响应正在执行的命令也很简单。OTOH,param数组在确实有抽象的参数数组时工作得很好,而不是仅仅需要一个简单的命令变量。</p>