Bash函数语法错误排查:分类存储.conf文件函数报错问题
错误原因与解决办法
错误根源
你遇到的Syntax error: "(" unexpected (expecting "}")错误,核心原因是使用了POSIX标准的sh解释器执行仅Bash支持的语法:
- 数组初始化
readable_file_list=()是Bash的扩展特性,POSIXsh不支持这种写法,当用sh运行脚本时,会把()识别为非法语法,抛出错误码4。
解决办法
方法1:强制用Bash运行脚本
- 在脚本的第一行添加Bash解释器声明:
#!/bin/bash - 运行脚本时明确指定Bash:
bash your_script.sh
方法2:兼容POSIX sh的写法(无需数组)
如果需要脚本能在sh环境下运行,可以去掉数组,直接在循环中写入目标文件,避免Bash特有的数组操作:
add_files () { # 先清空两个目标文件(避免残留旧内容) > readable_files.txt > unreadable_files.txt # 遍历根目录下的.conf文件 for file in /*.conf; do # 处理通配符匹配不到文件的情况(防止把"/*.conf"本身写入文件) [ -e "$file" ] || continue if [ -r "$file" ]; then echo "$file" >> readable_files.txt else echo "$file" >> unreadable_files.txt fi done }
额外提示
原代码中的/*.conf仅会匹配根目录下的.conf文件,如果需要递归查找系统中所有.conf文件,可以替换为find命令:
find / -name "*.conf" -type f | while read -r file; do # 这里放入判断可读/不可读并写入文件的逻辑 done
内容的提问来源于stack exchange,提问作者sth01020304
相关产品推荐
相关产品推荐

