【问题标题】:bash passing value as a parameter calculationbash 传递值作为参数计算
【发布时间】:2017-01-13 18:22:21
【问题描述】:

我写了一个小 bash 脚本

for (( j=10;j<20; j++ ))
    do
    ./b5 $j $[ $1 * 3 ]
    done

应该执行程序 b5 并发送两个参数 $j 和 $1 乘以 3。

当我尝试运行它时,我得到:

 * 3 : syntax error: operand expected (error token is "* 3 ")

应该怎么做呢?

【问题讨论】:

    标签: bash


    【解决方案1】:

    您应该使用expr $1 \* 3 将变量乘以一个数字。

    【讨论】:

    • $((...)) 几乎完全包含在任何 POSIX shell 中对 expr 的需求。您真正需要 expr 的唯一事情是为尚未提供自己的 shell 的正则表达式匹配。
    【解决方案2】:

    你必须使用$((..))来做算术表达式。

    相反,

    ./b5 $j $[ $1 * 3 ]
    

    ./b5 $j $(($1 * 3))
    

    【讨论】:

    • 你没有$[ ... ] 是一种过时但仍然有效的算术扩展形式。更大的问题是 $1 似乎没有设置。
    • @chepner,哦……好吧。我知道了谢谢。我刚刚在这个链接中发现了不同之处:stackoverflow.com/questions/2415724/…
    • 我想知道它什么时候会从bash 中删除,不过;它在即将发布的 4.4 版本中仍然有效。
    【解决方案3】:

    说实话,这两种选择都有效:

    • $(($1 * 3))
    • $[ $1 * 3]

    但他的问题是 $1 没有初始化。我的错。

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2011-08-06
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2012-10-24
      • 2018-05-25
      • 2010-11-06
      相关资源
      最近更新 更多