「-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を使用した2番目の呼び出しはうまく機能しますが、10(結果を表示しようとしている場合)を使用した最初の呼び出しではエラーが発生します。

$x周囲に引用符を追加すると、"$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以下を行う必要があります。

divisible_by "$divider"
x=$?

そして常に変数を引用しなければなりません。

関連情報