Shell脚本中((h=h+1))无法递增变量但终端运行正常如何解决
Shell脚本
((变量递增))不生效问题解决方案 问题原因
((表达式))是Bash专属的算术运算复合命令,不属于POSIX sh的标准语法。你在终端执行时默认使用Bash解析所以正常,写入脚本后如果用sh执行、或脚本未指定Bash作为解析器,就会无法识别((h=h+1))语法,不会执行赋值操作,因此变量h保持初始值不变。
你提到的i=$((i+1))写法可以正常运行,是因为$((算术表达式))是POSIX标准规定的算术扩展语法,所有兼容POSIX的shell(包括sh)都支持。
解决方法(仅使用((h=h+1))语法的前提下)
- 方法1:在脚本头部添加Bash shebang声明,指定用Bash解析脚本
脚本第一行添加内容:
之后给脚本添加执行权限,直接#!/bin/bash # 跨平台更兼容的写法为 #!/usr/bin/env bash./脚本名.sh运行即可。 - 方法2:执行脚本时显式指定用Bash运行
不需要修改脚本内容,运行时执行命令:bash 脚本名.sh
验证示例
修改后的完整测试脚本:
#!/bin/bash h=9 echo $h ((h=h+1)) echo $h ((h=h+8)) echo $h
运行后输出结果符合预期:
9 10 18
内容的提问来源于stack exchange,提问作者Vipul Anand
相关产品推荐
相关产品推荐

