为什么我会收到“-eq:一元运算符预期为 false”?

为什么我会收到“-eq:一元运算符预期为 false”?

我明白了

$ ./5_divisible_by_1_to_10.sh 
./5_divisible_by_1_to_10.sh: line 16: [: -eq: unary operator expected
 false
true

为了:

divisible_by () {
  under_test=$1
  from=2
  to=4
  divisible=0
  for ((check=from; check<=to; check++)) {
    if [ $(($under_test % $check)) -ne 0 ]; then
      divisible=1
    fi  
  }
  return $divisible
}

divider=10
x= divisible_by "$divider"
if [ $x -eq 0 ]; then  # <--- Line 16
  echo "$x true"
else
  echo "$x false"
fi
divider=12
if divisible_by $divider; then
  echo "true"
else
  echo "false"
fi

对 12 的第二次调用工作正常,但使用 10 的第一次调用(我试图显示结果)给出了错误。

$x在, ie周围添加引号"$x"会产生不同的错误:

$ ./5_divisible_by_1_to_10.sh 
./5_divisible_by_1_to_10.sh: line 16: [: : integer expression expected
 false
true

答案1

if [ $x -eq 0 ]

x是空的,因为该行

x= divisible_by "$divider"

是错误的:它divisible_by使用空环境变量进行调用x,但甚至不尝试x在 shell 环境中进行设置。你需要:

divisible_by "$divider"
x=$?

并且您应该始终引用变量。

相关内容