0

このコードの理由がわかりません

echo "Please, give me two numbers:"
echo 1: 
read a
echo 2:
read b 
echo "a = $a"
echo "b = $b"

OPT="Sum Sub Div Mul Mod"
 select opt in $OPT; do

if [ $opt = "Sum"  ]; then
 sum=$(echo $a + $b | bc -l)
 echo "SUM is: $sum"

elif [ $opt = "Sub"  ]; then
 sub=$(echo $a - $b | bc -l)
 echo "SUB is: $sub"

elif [ $opt = "Div"  ]; then
  div=$(echo $a / $b | bc -l)
  echo "DIV is: $div"

elif [ $opt = "Mul"  ]; then
  mul=$(echo $a * $b | bc -l)
  echo "MUL is: $mul"

elif [ $opt = "Mod"  ]; then
  mod=$(echo $a % $b | bc -l )
  echo "MOD is: $mod"

else
 clear
 echo "wrong choise"
 exit

fi

done

SUM、SUB、DIV は正しく実行できますが、MUL または MOD 操作を実行しようとするとエラーが発生します。

(standard_in) 1: 構文エラー

(standard_in) 1: 不正な文字: ~

(standard_in) 1: 不正な文字: ~

4

2 に答える 2

1

これは期待どおりに動作するはずです。と をエスケープする必要があり*ます%。そして、あなたは持っていましたecho "MOD is $mul"

echo "Please, give me two numbers:"
echo 1: 
read a
echo 2:
read b 
echo "a = $a"
echo "b = $b"

OPT="Sum Sub Div Mul Mod"
 select opt in $OPT; do

if [ $opt = "Sum"  ]; then
 sum=$(echo $a + $b | bc -l)
 echo "SUM is: $sum"

elif [ $opt = "Sub"  ]; then
 sub=$(echo $a - $b | bc -l)
 echo "SUB is: $sub"

elif [ $opt = "Div"  ]; then
  div=$(echo $a / $b | bc -l)
  echo "DIV is: $div"

elif [ $opt = "Mul"  ]; then
  mul=$(echo $a \* $b | bc -l)
  echo "MUL is: $mul"

elif [ $opt = "Mod"  ]; then
  mod=$(echo $a \% $b | bc -l )
  echo "MOD is: $mod"

else
 clear
 echo "wrong choice"
 exit

fi

done
于 2011-12-01T11:02:36.580 に答える
1

を引用する必要があります*。そうしないと、シェルによって展開されます。

    mul=$(echo $a '*' $b | bc -l)

%引用符を付けなくても問題ありませんが、簡単にするために、すべての演算子を引用符で囲むことができます。

于 2011-12-01T11:02:55.773 に答える