我正在使用类的结构在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
答案 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