BASH-Variablenname mit Nummernproblem

BASH-Variablenname mit Nummernproblem

Bei der Verwendung einer Variablen mit einer Zahl treten einige Probleme auf.

Das funktioniert;

sourceid_2="blah"
echo $sourceid_2

Aber das funktioniert nicht;

sourceid_2="blah"
i=2
echo $sourceid_$i

Irgendwelche Ideen, wie man das beheben kann? Ich habe es ohne Unterstrich versucht, aber das hat nicht geholfen.

Mein Endziel ist, etwas mit der Variable in einer for i in {2..7}-Schleife zu machen … etwa so:

for i in {2..7}
do
echo $sourceid_$i
done

Antwort1

echo $sourceid_$ierweitert zwei separate Variablen: $sourceid_und $i. Der einfachste Weg, das zu tun, was Sie versuchen, ist mit einer indirekten Referenz:

sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"

Aber wie @dave_thompson_085 anmerkte, sind Arrays für derartige Dinge normalerweise die bessere Möglichkeit:

declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"

Beachten Sie, dass Arrays eine Bash-Erweiterung sind und in einfacheren Shells nicht verfügbar sind.

Antwort2

Ihr Problem ist nicht ein Name, der eine Nummer enthält, was gut funktioniert, sondern ein Name, der eineVariable. Sie können verwenden eval(was schwierig ist, richtig zu machen und leicht zu vermasseln) oder Indirektion wie x=source_$i; echo "${!x}"in diesem Fall ist dies ein Duplikat vonBash-Array mit Variable im Namendie SX bereits automatisch in die zugehörige Liste eingefügt hat, damit Sie sie ansehen können.

Wenn Sie jedoch mehrere verwandte Variablen per Nummer aufrufen möchten, ist es noch besser, ein Array zu verwenden. Genau dafür sind Arrays konzipiert, was sie praktischer und sicherer macht. Weitere Informationen zu Arrays in Bash finden Sie im Abschnitt des Bash-Handbuchs über Arrays auf Ihrem System oderim Web hier

verwandte Informationen