Makefile forloop break语句中的问题

问题描述 投票:-1回答:1
print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        ( break ); \
        ( echo Break not working ); \
    done

我得到的输出

Number: 10
Break not working
Number: 11
Break not working
Number: 12
Break not working
Number: 13
Break not working
Number: 14
Break not working
Number: 15
Break not working

我需要的输出:

Number: 10
shell makefile gnu-make
1个回答
0
投票

在发布的代码中,'for'循环在外壳程序中(bash?)执行,而不是通过'make'实用程序执行。

bash脚本的问题在于'break'语句正在子进程中运行-因为它位于括号'(break')内。按照bash手册,控制流命令(如果返回,则为...)应在“主”进程中执行。无法将它们拆分为多个进程。

删除'('应该可以解决问题-循环将在打印'Number:10'之后停止。

print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        break ; \
        ( echo Break not working ); \
    done

作为旁注,无需将'echo'语句放在'(...)'中。它会使脚本分叉不必要的实例或bash。

© www.soinside.com 2019 - 2024. All rights reserved.