2016-11-08 8 views
0

Ich bin eine geschachtelte for-Schleife in Bash mit Struktur für eine Klasse. Ich habe das Skript geschrieben und es funktioniert, aber ich bin verwirrt darüber, warum das Zeichen (das fett ist), K in diesem Fall, ist in den geschweiften Klammern nach Struktur -K erforderlich, wenn ich bereits gesagt habe, dass ich K 1 will -5? Diese ist, was ich haben-geschachtelt für Schleife in Bash mit Struktur

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 

Antwort

1

In Ihrem Skript, der einzige Ort, die variablen Erweiterungen begrenzen müssen mit ${} ist:

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

Denn:

  • Der gültige variable Bestandteil Zeichen sind alle Buchstaben, Ziffern und Unterstriche in Regex: [A-Za-z0-9_]

  • Sie müssen also eine variable Erweiterung begrenzen, wenn die folgenden Zeichen auch ein gültiger variable Bestandteil Charakter sind

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

  • -${K} Bedürfnisse ${}, weil es von _

    folgte
  • ${run} nicht unbedingt Abgrenzung, weil es gefolgt wird . die

0

Die Shell-Variable $K und die Programmoption -K sind zwei verschiedene Dinge keine gültige variable Bestandteil Charakter. Sie könnten einen beliebigen Variablennamen nicht

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 

Das Programm verwenden, um einen Wert für eine fehlende -K Option aus einem gleichnamigen Shell-Variablen abzuleiten.

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 
Verwandte Themen