【问题标题】:product of two input variable in shellshell中两个输入变量的乘积
【发布时间】:2016-05-18 16:12:36
【问题描述】:

在“+”、“-”、“/”的情况下程序运行良好

例子:

./calculate.sh 1 + 2 ==> output is 3.

但这里的问题是当我输入时:

./calculate.sh 1 * 2 ==>output is "Please ..."

我已经尝试过这样的"\*",但变量 $2 似乎无法得到我想要的。

任何人都可以帮助我这里有什么问题?

#!/bin/sh
if [ $# -ne 3 ]
 then
      echo "Please input a number , an operator + or - or * or /"
 else
      case "$2" in 
            "+") echo "Sum is `expr $1 + $3`";;
            "-") echo "Substraction is `expr $1 - $3`";;
            "*") echo "Product is `expr $1 \* $3`";;
            "/") echo "Division is `expr $1 / $3`";;
      esac
fi

【问题讨论】:

  • 它确实适用于./calculate.sh 1 '*' 2。请提供确切您在引用该论点时看到的不当行为的详细信息;否则,这是 CNR(无法重现)。
  • 也就是说,expr 是古老的——现代 POSIX sh 进行数学运算的方法是 $(( $1 * $3 )),它更高效(不涉及分叉子外壳)。
  • (顺便说一句——不要在可执行脚本上使用.sh 扩展名;可执行脚本定义命令,而命令没有扩展名——你运行ls,而不是@ 987654331@。扩展适用于旨在获取源的 shell 库,而不是用于执行的脚本;另请参阅 talisman.org/~erlkonig/documents/…)。
  • 您尝试过\*"\*" 吗?如果您使用引号 反斜杠,则反斜杠将保留在字符串中,因此它不会匹配任何情况。
  • @Barmar, ...这取决于引号是用于文字还是 StackOverflow 格式。您已经编辑了问题,澄清了支持后一种解释的模棱两可,但我认为在 OP 验证该假设之前,以任何程度的确定性发表声明是轻率的。

标签: linux shell operating-system


【解决方案1】:

你应该这样使用它

./calculate.sh 2 \* 3

或者

./calculate.sh 2 "*" 3

或者

./calculate.sh 2 '*' 3

您使用的是“\*”,这是错误的。

【讨论】:

  • OP 声称他们正在将它与"*" 一起使用(就我们的目的而言,它完全等同于\*),但它仍然失败。请参阅问题的第四段。
  • @CharlesDuffy 是的。只是重读。在 ksh、zsh 和 bash 中,一切都对我有用,
  • @CharlesDuffy 他说他试过"\*"。如果他使用引号和反斜杠,它将不起作用 - 它应该只是其中一个。
  • @Barmar,他说“\*”——如果是"\*",那么就引号是作为读者说明还是文字而言(好吧,对于外壳,语法)内容。
  • @CharlesDuffy 我知道,但很明显他不知道如何在 SO 编辑器中突出显示(我必须全部修复)。由于这对他不起作用,我认为可以合理地假设他没有正确地进行转义或引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2019-02-10
  • 2018-12-01
  • 1970-01-01
  • 2019-09-22
相关资源
最近更新 更多