这是我的脚本:
#!/bin/bash
JOB_NUM=4
function checkJobNumber() {
if (( $JOB_NUM < 1 || $JOB_NUM > 16 )); then
echo "pass"
fi
}
...
checkJobNumber
...
当我尝试启动脚本时,我收到以下消息:
./script.sh line 49: ((: < 1 || > 16 : syntax error: operand expected (error token is "< 1 || > 16 ")
(请注意错误消息中的空格)
我真的不明白问题是什么。如果我在命令行手动进行评估,它可以工作。
另外,我尝试了不同的评估,例如if [[ "$JOB_NUM" -lt 1 -o "$JOB_NUM" gt 16 ]];
...仍然没有成功。
更新:正如建议的那样,我在函数调用之外的其余代码中进行了几次尝试,我发现了问题。
我的变量声明实际上是这样缩进的:
JOB_NUM= 4
THREAD_NUM= 8
.....
VERY_LONG_VAR_NAME= 3
显然,这影响了评估。呸!它以前一直对我有用,那么为什么现在不呢?
如果我删除空格,评估有效:
JOB_NUM=4
THREAD_NUM=8
....
VERY_LONG_VAR_NAME=3
好吧,我正式讨厌bash
。 。叹了口气:(
这将正常工作
#!/bin/bash
JOB_NUM=7
function checkJobNumber() {
if [ $JOB_NUM -lt 0 ] || [ $JOB_NUM -gt 16 ] ; then
echo "true"
else
echo "false"
fi
}
checkJobNumber
如果你想在测试期间检查变量,你可以在你的bash中写:
设置 -u
如果变量设置不正确,这将生成类似"JOB_NUM:未绑定变量"的消息