【问题标题】:(standard_in) 1: syntax error in my bash script - bc error [duplicate](standard_in) 1:我的 bash 脚本中的语法错误 - bc 错误 [重复]
【发布时间】:2022-01-28 01:37:41
【问题描述】:

我正在尝试创建一个计算器,它可以在 shell 脚本上进行基本数学运算,但是当我尝试 两个数字时,它一直返回此语法错误 (standard_in) 1: syntax error,我试图找到一些解决方案,但到目前为止没有任何帮助。

这是我的代码:

echo "====== Calculator ======"
echo "  "

# It will save both numbers to the variables
echo "Type a number: "
read numA
echo "Type another number: "
read numB
echo "  "

# It will give a list of possible operations
echo "Choose an option"
echo "------------------"
echo "1)Addition"
echo "------------------"
echo "2)Subtraction"
echo "------------------"
echo "3)Multiplication"
echo "------------------"
echo "4)Division"
echo "------------------"
echo "  "
read -s opt

# It will make the math behind each operation
case $opt in
        1)result=`echo $numA + $numb | bc`;;
        2)result=`echo $numA - $numB | bc`;;
        3)result=`echo $numA * $numB | bc`;;
        4)result=`echo "scale=2; $numA / $numB" | bc`;;
esac
echo "Result: $result"

【问题讨论】:

  • * 是文件名通配符,将扩展为当前目录中的文件列表。您还应该对变量进行双引号,并且...嗯,几乎所有内容。我还建议使用 $( ) 而不是反引号。
  • 这能回答你的问题吗? When should I wrap quotes around a shell variable?(同样的建议适用于字符串和变量。)
  • 顺便说一句,欢迎来到 Stack Overflow!请使用tour 并阅读How to Ask。如需日后调试帮助,请发送minimal reproducible example,包括最少的代码、示例输入和预期输出。
  • 另外顺便说一句,您可能想使用select command。这比编写自己的菜单要容易得多。

标签: linux bash shell bc


【解决方案1】:

在“*”之前加一个反斜杠,即

3)result=`echo $numA \* $numB | bc`;;

【讨论】:

  • 非常感谢!你能给我一个链接或解释为什么需要反斜杠吗?
  • @LucasLudicsa 因为 shell 在将参数传递给命令之前会对参数执行 filename wildcard expansion。比较 echo 5 * 3echo 5 \* 3 的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多