Grub2条件判断异常:if语句恒真且分支均执行问题求助
Grub2变量值判断问题分析与修复
Grub2完全支持变量值的条件判断,你遇到的异常是语法格式错误导致的,具体问题点如下:
- 变量赋值错误:
set命令中,等号前后不能有空格。比如set var1 = "foo"会被解析为创建名为var1(末尾带空格)的变量,值为"foo"(开头带空格),后续的变量引用自然无法匹配预期值。 - 条件判断语法错误:
if与[之间、]与;之间必须有空格。if[会被Grub2当成一个未知的命令/标识符,导致条件判断逻辑失效,出现“始终为真”“分支都执行”的异常。
修正后的代码示例
第一个测试用例:
set var1="foo" if [ "${var1}" = "bar" ]; then default=2 fi
第二个带else分支的用例:
set model="foo" if [ "${model}" = "bar" ]; then default=2 else default=0 fi
Grub2的条件判断语法类似POSIX shell,但对空格的要求更严格——关键字、内置命令([)、参数之间必须用空格分隔,变量赋值时等号前后不能有空格,否则会触发解析错误,导致逻辑异常。
内容的提问来源于stack exchange,提问作者Schmaniel
相关产品推荐
相关产品推荐

