-eq:在expr长度评估中期望的一元运算符

时间:2018-04-13 11:16:28

标签: shell unix

有人知道为什么下一个表达式在LINUX中正确执行但在UNIX中没有执行?

SOME_DATE=201804132359    
if [ `expr length $SOME_DATE` -eq 12 ]; then

在那些无效的情况下,我们会收到此错误:

[: -eq: unary operator expected

1 个答案:

答案 0 :(得分:1)

这是因为linux正在移植 GNU expr ,而unix正在移植 POSIX expr ,并且它们有不同的概要。

expr length $SOME_DATE无法使用unix,它会产生错误,这就是您的代码会中断的原因。

您可以在unix上更改代码。

SOME_DATE=201804132359    
if [ `expr $SOME_DATE : ".*"` -eq 12 ]; then

但如果您只是想要结果,可能[ "${#SOME_DATE}" -eq 12 ]可能是更好的解决方案。