Shell [:-ne:应为一元运算符

Shell [:-ne:应为一元运算符,shell,while-loop,Shell,While Loop,我正在尝试使用一个脚本来搜索数组中的某个变量。不幸的是,我正在运行的系统会根据当时的其他变量更改数组的顺序。我知道我要查找的前七个字符将是RPT_NUM,所以我尝试了以下while循环,但我一直得到错误[:-ne:应为一元运算符 START=5 MYVAR=( $(/usr/sbin/asterisk -rx "rpt showvars 47168")) #VAR=${MYVAR[3]} VAR="${MYVAR[START]}" CURVAR= echo "${VAR:0:7}" ech

我正在尝试使用一个脚本来搜索数组中的某个变量。不幸的是,我正在运行的系统会根据当时的其他变量更改数组的顺序。我知道我要查找的前七个字符将是RPT_NUM,所以我尝试了以下while循环,但我一直得到错误[:-ne:应为一元运算符

START=5
MYVAR=( $(/usr/sbin/asterisk -rx "rpt showvars 47168"))

#VAR=${MYVAR[3]}

VAR="${MYVAR[START]}"

CURVAR= echo "${VAR:0:7}"
echo $VAR

while ["$CURVAR" -ne "RPT_NUM" ]
do

        let START+=1
        CURVAR= echo "${VAR:0:7}"
        echo "End loop"
done
STATUS=echo "${VAR: -1}"

echo $STATUS

我是一名新手,仍在学习,因此任何帮助都将非常有用。

尝试将您的代码更改为以下代码:

#!/usr/bin/env bash

START=5
MYVAR=( $(/usr/sbin/asterisk -rx "rpt showvars 47168"))

#VAR=${MYVAR[3]}

VAR="${MYVAR[START]}"

CURVAR="${VAR:0:7}"
echo $VAR

while [ "$CURVAR" == "RPT_NUM" ]
do

  let START+=1
  CURVAR="${VAR:0:7}"
  echo "End loop"
done
STATUS="${VAR:-1}"

echo $STATUS
  • 将while循环中的条件表达式更改为:
  • while[“$CURVAR”==“RPT_NUM”]
    
  • 将子shell表达式更改为:
  • CURVAR=“${VAR:0:7}”
    ...    
    STATUS=“${VAR:-1}”
    
    [
    之后需要一个空格。另外,
    CURVAR=echo“${VAR:0:7}”等。不要做我认为他们会做的事。我可以推荐吗?可能重复感谢您的建议,我将签出shellcheck.net。另外,添加空格后,我现在得到:[::整数表达式expected@KB3BYJ
    -ne
    用于数值比较。运行
    man[
    自己计算其余部分。
    CURVAR=echo“${VAR:0:7}”
    仍然是胡说八道。