shell脚本报错:"[: =: unary operator expected"解决办法
<p><strong>shell脚本报错:"[: =: unary operator expected"解决办法</strong></p>
<p>
在匹配字符串相等时,我用了类似这样的语句:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_343206">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash keyword">if</code> <code class="bash plain">[ $STATUS == </code><code class="bash string">"OK"</code> <code class="bash plain">]; </code><code class="bash keyword">then</code> </div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="bash functions">echo</code> <code class="bash string">"OK"</code>
</div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash keyword">fi</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
在运行时出现了 [: =: unary operator expected 的错误,就一直找不到原因,尝试了删除等号两侧的空格和括号里的空格都不管用,最后baidu了一下,才找到原因。把语句改成这样就不会出错了.</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_786351">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash keyword">if</code> <code class="bash plain">[[ $STATUS = </code><code class="bash string">"OK"</code> <code class="bash plain">]]; </code>
</div>
<div class="line number2 index1 alt1">
</div>
<div class="line number3 index2 alt2">
<code class="bash keyword">then</code> </div>
<div class="line number4 index3 alt1">
</div>
<div class="line number5 index4 alt2">
<code class="bash functions">echo</code> <code class="bash string">"OK"</code>
</div>
<div class="line number6 index5 alt1">
</div>
<div class="line number7 index6 alt2">
<code class="bash keyword">fi</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
究其原因,是因为如果变量STATUS值为空,那么就成了 [ = "OK"] ,显然 [ 和 "OK" 不相等并且缺少了 [ 符号,所以报了这样的错误。当然不总是出错,如果变量STATUS值不为空,程序就正常了,所以这样的错误还是很隐蔽的。</p>
<p>
或者用下面的方法也能避免这种错 误<span>:if [ "$STATUS"x == "OK"x</span><span> ]; then echo "OK"</span><span>fi</span>。当然,x也可以是其他字符。顺便提一点,shell中有没有双引号在很多情况下是一致的。</p>
<p>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!</p>
<p>
原文链接:http://blog.csdn.net/goodlixueyong/article/details/6564591</p>
頁:
[1]