Bash脚本报错unexpected end of file,请求排查解决
解决Bash函数语法错误:unexpected end of file
你的问题出在Bash函数的语法格式不规范上,核心是函数体内部的语句分隔和大括号的使用不符合Bash的解析规则。Bash对函数定义的语法有明确要求:
- 函数起始的大括号
{后面,必须用分号或者换行和后续语句分隔 - 函数体内的多条命令之间,必须用分号或者换行分隔
- 函数结束的大括号
}前面,最后一条命令也需要用分号或换行和大括号分隔
修正后的完整代码
function sindex { x="${1%%$2*}" [[ $x = $1 ]] && echo -1 || echo ${#x} } T_ID_INDEX=$(sindex "$TARGET_RETURN" "id=") T_ID_INDEX=$((T_ID_INDEX + 4)) T_ID=${TARGET_RETURN:T_ID_INDEX:36}
如果偏好把函数写在一行,必须用分号正确分隔所有部分:
function sindex { x="${1%%$2*}"; [[ $x = $1 ]] && echo -1 || echo ${#x}; } T_ID_INDEX=$(sindex "$TARGET_RETURN" "id=") T_ID_INDEX=$((T_ID_INDEX + 4)) T_ID=${TARGET_RETURN:T_ID_INDEX:36}
错误原因详解
你原来的代码把函数体的两条命令写在一行却没有加分号,同时起始大括号后也没有正确分隔,导致Bash无法识别完整的函数结构,误以为函数定义未完成,从而抛出unexpected end of file错误。另外你尝试添加的done、fi是循环和条件判断的结束关键字,和函数定义无关,自然解决不了问题。
内容的提问来源于stack exchange,提问作者h.lina
相关产品推荐
相关产品推荐

