在Bash中使用结构嵌套for循环

时间:2016-11-08 04:28:25

标签: bash for-loop command-line structure nested-loops

我正在使用类的结构在bash中运行嵌套的for循环。我已经编写了剧本并且它有效,但是我很困惑为什么在结构-K之后的大括号中,为什么字符(加粗),K在这种情况下是必要的?说我要K 1-5? 这就是我所拥有的 -

for K in {1..5}
do
    for run in {1..3}
    do
        echo "K = ${K}; run = ${run}"
        structure -K **${K}** -o K_${K}_run_${run}.txt
    done
done

2 个答案:

答案 0 :(得分:1)

在您的脚本中,变量扩展需要与${}分隔的唯一位置是:

K_${K}_run_${run}.txt

由于:

  • 有效的变量构成字符都是正则字符,数字和下划线,在Regex术语中:[A-Za-z0-9_]

  • 因此,如果以下字符也是有效的变量构成字符,则需要分隔一个变量扩展

K_${K}_run_${run}.txt

  • -${K}需要${},因为后跟_

  • ${run}并不严格需要分隔,因为后面跟.不是有效的变量构成字符

答案 1 :(得分:0)

shell变量$K和程序选项-K是两回事。您可以使用任何变量名称

for m in {1..5}
do
    for run in {1..3}
    do
        echo "K = ${m}; run = ${run}"
        structure -K ${m} -o K_${m}_run_${run}.txt
    done
done

程序不会从同名shell变量中推断缺少-K选项的值。

for K in {1..5}
do
    for run in {1..3}
    do
        echo "K = ${K}; run = ${run}"
        # Wrong: does not assume -K ${K}
        structure -o K_${K}_run_${run}.txt
    done
done