擅长:python、mysql、java
<p>让我再试一次:您希望您的语法<code>!(...)</code>在哪个shell中工作?是巴什吗?是ksh吗?我从来没有用过它,快速搜索相应的bash特性也没有用过。我怀疑你的语法是错误的,这就是错误信息告诉你的。在这种情况下,您的问题完全独立于python和<code>subprocess</code>模块。在</p>
<p>如果系统上的特殊shell支持此语法,则需要确保Python在调用命令时使用的是同一个shell。它告诉您它一直在使用哪个shell:<code>/bin/sh</code>。这通常只是指向实际shell可执行文件的链接。它是否指向您在其中测试命令的同一个shell?在</p>
<p>编辑:您引用的SO解决方案在注释中包含该解决方案:</p>
<blockquote>
<p>Tip: Note however that using this pattern relies on <strong>extglob</strong>. You can
enable it using shopt -s extglob (If you want extended globs to be
turned on by default you can add shopt -s extglob to .bashrc)</p>
</blockquote>
<p>为了证明不同的shell可能以不同的方式处理语法,首先使用bash:</p>
<pre><code>$ !(uname)
-bash: !: event not found
</code></pre>
<p>然后,使用/bin/dash:</p>
^{pr2}$