在Bash中进行整数比较

4
我需要实现类似以下的功能:
if [ $i -ne $hosts_count - 1] ; then
    cmd="$cmd;"
fi

但是我收到了如下错误信息:

./installer.sh: 第124行: [: 缺少 `]'

我做错了什么?

4个回答

8
命令[无法处理测试内的算术运算。请将其更改为:
if [ $i -ne $((hosts_count-1)) ]; then

编辑:@cebewee所写的也是正确的;在关闭]之前必须放置一个空格。但是,仅这样做将导致另一个错误:额外的参数“-”


4
  1. The ] must be a separate argument to [.
  2. You're assuming you can do math in [.

    if [ $i -ne $(($hosts_count - 1)) ] ; then
    

谢谢,但是为什么我需要使用双重[[?@pepoluan的答案也可以,没有双重[[。 - lstipakov
嗯,你不一定非要这样做,但是使用[[可以让你拥有未加引号的空变量而不会引起问题。 - Ignacio Vazquez-Abrams

3
在bash中,你可以仅使用(( ))来处理纯算术条件,从而避免使用[ ][[ ]]
if (( i != hosts_count - 1 )); then
  cmd="$cmd"
fi

0

闭合的]需要在前面加上一个空格,即写成

if [ $i -ne $hosts_count - 1 ] ; then
    cmd="$cmd;"
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接