Shell脚本中命令替换嵌套进程替换的语法错误排查
问题原因与解决办法
错误原因
你遇到的syntax error near unexpected token '('错误,核心原因是进程替换语法<(...)是Bash专属特性,POSIX标准的Shell(比如多数系统默认的sh,如Debian/Ubuntu的dash)并不支持这个语法。如果你的脚本开头用了#!/bin/sh,或者用sh命令执行脚本,就会触发这个错误。
解决办法
1. 强制用Bash执行脚本
在脚本最顶部添加Bash的shebang行,确保脚本用Bash解释:
#!/bin/bash if [ "$(cmp -bl <(echo ABCDEF) <(echo ABDCEF) | wc -l)" = "1" ]; then # 这里写你的逻辑代码 echo "匹配成功" fi
如果是在终端直接运行命令,确保用bash启动,比如:
bash your_script.sh
2. 兼容POSIX Shell的替代写法(可选)
如果需要脚本兼容所有POSIX Shell,可以用临时文件替代进程替换,避免<(...)语法:
#!/bin/sh # 创建临时文件存储两个字符串 echo "ABCDEF" > /tmp/str1 echo "ABDCEF" > /tmp/str2 # 比较并统计差异行数 diff_count=$(cmp -bl /tmp/str1 /tmp/str2 | wc -l) # 清理临时文件 rm /tmp/str1 /tmp/str2 if [ "$diff_count" = "1" ]; then # 你的逻辑代码 echo "匹配成功" fi
内容的提问来源于stack exchange,提问作者ibna
相关产品推荐
相关产品推荐

