加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

避免在bash内置函数中扩展*

发布时间:2020-12-15 22:25:20 所属栏目:安全 来源:网络整理
导读:我有一个bash脚本的问题.我必须使用运算符*来进行乘法运算.相反,脚本会让我厌倦扩展,并使用as运算符作为脚本本身的名称.我尝试使用单引号但它不起作用:(这是代码 #!/bin/bash -x# Bash script that calculates an arithmetic expression# NO PRECEDENCE FOR
我有一个bash脚本的问题.我必须使用运算符*来进行乘法运算.相反,脚本会让我厌倦扩展,并使用as运算符作为脚本本身的名称.我尝试使用单引号但它不起作用:(这是代码

#!/bin/bash -x

# Bash script that calculates an arithmetic expression
# NO PRECEDENCE FOR OPERATORS
# Operators: + - * 

if [ "$#" -lt "3" ]
then 
    echo "Usage: ./calcola.scr <num> <op> <num> ..."
    exit 1
fi

result=0
op=+
j=0

for i in "$@"
do
    if [ "$j" -eq "0" ]
    then
        # first try
        #result=$(( $result $op $i )) 

        # second try
        let "result$op=$i"

        j=1
    else
        op=$i
        j=0
    fi
done

echo "Result is $result"

exit 0

解决方法

如果“op”是“*”,它将在脚本甚至看到它之前由shell扩展.您需要为乘法运算符选择其他内容,例如“x”,或者强制用户通过将其放在单引号中或在其前面加上反斜杠来逃避它.

如果练习的条款允许,也许您应该尝试使用“read”从标准输入获取表达式,而不是从命令行获取它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读