Bash脚本数组操作报错求助:Syntax error: "(" unexpected
问题原因与解决建议
问题根源
你的脚本使用了Bash特有的数组语法,但执行时调用的是sh——多数系统中/bin/sh是POSIX兼容的轻量shell(比如Dash),它不支持Bash的数组初始化(ERROR_MESSAGES=("Error1"))和数组追加(+=)语法,因此触发语法错误。
另外,脚本开头的#!/bin/sh指定了默认用POSIX shell执行,即便系统中存在Bash,也会强制用sh来解析脚本,导致语法不兼容。
解决方法
方法1:改用Bash执行脚本
修改脚本的shebang行,将开头的#!/bin/sh替换为:
#!/bin/bash
然后给脚本添加执行权限:
chmod +x Text.sh
之后直接执行脚本:
./Text.sh
或者不修改shebang,直接用Bash命令执行:
bash Text.sh
方法2:适配POSIX Shell(无需Bash)
如果必须在POSIX兼容的sh中运行,可放弃数组,改用空格分隔的字符串模拟:
#!/bin/sh EXIT_CODE=0 ERROR_MESSAGES="Error1" # 追加错误信息 ERROR_MESSAGES="$ERROR_MESSAGES Error1" ERROR_MESSAGES="$ERROR_MESSAGES Error2" ERROR_MESSAGES="$ERROR_MESSAGES Error3" # 遍历所有错误信息的示例 set -- $ERROR_MESSAGES for msg in "$@"; do echo "Error: $msg" done
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

