Bash脚本算术表达式赋值异常求助:字符串参数长度判断
解决Bash脚本中算术表达式未计算的问题
你遇到的核心问题很明确:当你把算术表达式的字符串直接赋值给变量时,Bash并没有自动计算它的结果,而是直接把字符串本身存了下来。咱们来一步步修正这个脚本:
问题根源
你的原脚本里,*) myVariable="${#stringArg}*2-2" ;;这一行只是将"3*2-2"这样的字符串赋值给了myVariable,Bash不会主动解析这个字符串为算术运算,所以运行时直接输出了表达式文本,而不是计算后的结果。
修正方案1:使用$((...))进行算术扩展
这是Bash中最常用的算术计算方式,直接将表达式放在$(( ))中就能得到计算结果:
#!/bin/bash stringArg=$1 case "${#stringArg}" in 1) myVariable=1 ;; *) myVariable=$(( ${#stringArg} * 2 - 2 )) ;; esac echo $myVariable
当你运行./test.sh 123时,${#stringArg}获取到参数长度3,$((3*2-2))会计算出4,最终输出正确结果。
修正方案2:使用let命令执行算术赋值
如果你更习惯用let命令,也可以修改成这样:
#!/bin/bash stringArg=$1 case "${#stringArg}" in 1) let myVariable=1 ;; *) let myVariable="${#stringArg}*2-2" ;; esac echo $myVariable
let命令会直接执行后面的算术表达式,并将结果赋值给指定变量,同样能得到你想要的输出。
两种方案都能解决问题,你可以根据自己的习惯选择其中一种。
内容的提问来源于stack exchange,提问作者T.Poe
相关产品推荐
相关产品推荐

