【发布时间】:2018-11-12 18:00:34
【问题描述】:
我正在制作这个非常简单的算术脚本,但是当我尝试传递 * 运算符时出现了这个奇怪的错误。
语法:[命令] [num1] [num2] [算术运算符]
代码如下:
result=$(($1$3$2))
echo "Calculation result is: $result "
像这样传递“*”运算符:
bash my_script.sh 1 2 *
... 返回以下错误:
第 7 行:3Access:值对于 base 来说太大(错误标记是“3Access”)
我通过测试语句将* 替换为\\\* 来修复它。虽然我想了解为什么会发生此错误。
我发现的唯一线程是指关于 BASH 假定为八进制的上述八进制值的错误。但我不清楚为什么 * 被视为一个数值。
【问题讨论】:
-
可以使用
echo "$((3Access))"重现,默认情况下,基数为 10,字母字符在基数 10 中非常好,但是在基数 36 中它可以工作echo "$((36#3Access))",但可能不是您想要的,原因它看起来是一个数值是双括号用于算术扩展 -
您没有共享确切的命令,但我认为您没有正确引用
*,因此 shell 会扩展它。 -
你如何“传递*”?你运行
cmd 4 5 *吗?还是你避开了星号? -
能否提供
echo $1、echo $2、echo $3的输出。通过提供允许其他人重现问题的代码,您还可以显着增加获得帮助的机会。见stackoverflow.com/help/mcve。
标签: bash command-line-arguments