Bash脚本出现if: Expression Syntax错误,请求排查与修正
问题排查与修复方案
语法错误原因
- 变量引用边界错误:
$1_chain.v会被shell误解析为变量$1_chain,而非$1拼接_chain.v,必须用${1}_chain.v明确变量范围。 - 条件逻辑不符合需求:原脚本第一个条件判断
$3包含165,但实际需求是匹配ss,需修正正则目标。 - Shell兼容性问题:
[[ ]]是Bash专属语法,若用sh执行脚本会触发语法错误,需在脚本开头指定Bash解释器。 - 冗余语法:
then/fi内的{ }属于多余写法,可直接删除。
修复后的脚本
#!/bin/bash if [[ $1 =~ core ]] && [[ $3 =~ ss ]]; then sed -ie "s?parameter PRTIME .*?#parameter PRTIME\nparameter PRTIME = 3.300000;?g" "${1}_chain.v" elif [[ $1 =~ top ]] && [[ $3 =~ ss ]]; then sed -ie "s?parameter PRTIME .*?#parameter PRTIME\nparameter PRTIME = 3.000000;?g" "${1}_chain.v" else sed -ie "s?parameter PRTIME .*?#parameter PRTIME\nparameter PRTIME = 2.500000;?g" "${1}_chain.v" fi
额外优化说明
- Bash的
=~匹配默认支持子串匹配,=~ core等价于=~ .*core.*,无需额外添加首尾通配符。 - 脚本开头的
#!/bin/bash必须保留,确保系统用Bash解释器执行脚本,避免兼容性问题。 sed中的换行符\n无需转义,直接写入即可实现换行效果。
内容的提问来源于stack exchange,提问作者priya s
相关产品推荐
相关产品推荐

