(stdin) 1: bc 使用時の構文エラー

(stdin) 1: bc 使用時の構文エラー

このコマンドがありますが、うまくいきます。しかし、(standard_in)1:構文エラーが表示されますが、識別方法がわかりません。

participants=0
while IFS=, read -r id name nat sex date height weight sport gold silver bronze info; do
if [[ $(echo "$height>=0.1 && $height<=$2 && $weight>=0.1 && $weight<=$3" | bc) -eq 1 ]] ; then
let participants++
fi
echo -e $participants
done < $1

誰かが私のエラーを見つけるのに役立ちますか?

ありがとう

ベストアンサー1

変数($height$weightまたは)のいずれかが空であるか、$2有効な$3数字ではありません。

$ echo "6>=5" | bc
1

# First operand is not a number
$ echo "6x>=5" | bc
(standard_in) 1: syntax error

# First operand is empty
$ echo ">=5" | bc
(standard_in) 1: syntax error

デバッグ目的のために、どの変数に有効な数値が含まれていないかを確認できるようにecho実行することをお勧めします。bc

participants=0
while IFS=, read -r id name nat sex date height weight sport gold silver bronze info; do

  echo "\$height='$height' \$weight='$weight' \$2='$2' \$3='$3'"
  # Or:
  echo "Going echo the following to bc: $height>=0.1 && $height<=$2 && $weight>=0.1 && $weight<=$3"

  if [[ $(echo "$height>=0.1 && $height<=$2 && $weight>=0.1 && $weight<=$3" | bc) -eq 1 ]] ; then
    let participants++
  fi
  echo -e $participants
done < $1

おすすめ記事