Makefile中for循环break语句失效问题
解决Makefile中break语句失效的问题
哦,这个坑我之前踩过!你遇到的问题根源在于每个被(...)包裹的命令都会启动一个独立的子shell,你的break语句只在它所在的那个子shell里生效,完全影响不到外层的for循环——所以循环会老老实实跑完所有数字,每个循环里的两个echo都会执行(毕竟break只退出了中间的子shell,外层循环还在继续走流程)。
修复方案:去掉不必要的子shell包裹
把那些多余的括号删掉,让所有命令都在同一个shell进程里执行,这样break就能正常终止外层的for循环了:
print: @for number in 10 11 12 13 14 15; do \ echo "Number: $$number"; \ break; \ echo Break not working; \ done
为什么这样有效?
去掉括号后,for循环、echo、break都运行在同一个shell进程中,break语句会直接终止当前的for循环,后面的echo Break not working根本不会被执行,执行结果就是你期望的:
Number: 10
如果之后你确实需要用子shell(比如临时切换目录、修改环境变量且不想影响后续命令),一定要确保break语句和它要终止的循环处于同一个子shell环境里——比如把整个循环逻辑包裹在一个大的子shell中,而不是把每一行命令都单独放进子shell里。
内容的提问来源于stack exchange,提问作者mohan lal
相关产品推荐
相关产品推荐

