当我试图在新环境中执行一个脚本时,我想出了这个错误:
[: 10: -lt: unexpected operator
这是脚本的痛苦部分:
end=$((SECONDS+60)) while [ $SECONDS -lt $end ]; do # process some queue... sleep 5 done
起源系统:Amazon Linux AMI 2013.09(cpe:/ o:amazon:linux:2013.09:ga)
目标系统:Debian版本6.0.7
我可以阅读shell / bash / dash版本可以改变,但这仍然是相当晦涩的我。 我试图在脚本的第一行指定正确的shell:
#! /bin/bash
要么
#! /bin/sh
没有机会…
我也可以发现,使用operator ==而不是=时,用户有类似的错误信息。 那么什么才是正确的替代品? 有没有其他解决scheme? 任何暗示热烈欢迎!
Dash不支持在Bash中find的$SECONDS自动递增variables。 由于该variables没有值,因此test命令( [ )会在操作符之前看到未设置的variables,并生成您发布的错误。
示范:
$ dash -c 'echo "[$SECONDS]"' [] $ bash -c 'echo "[$SECONDS]"' [0] $ dash -c '[ $var -lt 3 ]' dash: 1: [: -lt: unexpected operator $ dash -c 'var=1; [ $var -lt 3 ]' $
您可以使用date命令来执行检查。 请注意,这可能是昂贵的,因为你可以多次调用一个外部工具。
可能还有其他方法可以完成你想要做的事情,但是你不会说这是什么。
另请参阅BashFAQ / 068 。
将脚本的第一行更改为:
#!/bin/bash
如果你在Debian上,并且(1)像bash那样,并且(2)知道脚本是为链接/ bin / sh下的/ bin / sh的系统编写的。 我放弃尝试通用/ bin / sh脚本,如果你控制下的所有系统都支持bash,那么这是一个无用的练习。
我知道这是一个古老的问题,但没有人给出最简单的答案。