Nombre de variable BASH que contiene problema numérico

Nombre de variable BASH que contiene problema numérico

Tengo algún problema al usar una variable con un número.

Esto funciona;

sourceid_2="blah"
echo $sourceid_2

Pero esto no funciona;

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

Alguna idea de cómo solucionar este problema? Lo intenté sin el guión bajo... pero eso no ayudó.

Mi objetivo final es hacer algo con la variable en un bucle for i en {2..7}... así;

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

Respuesta1

echo $sourceid_$iexpande dos variables separadas: $sourceid_y $i. La forma más sencilla de hacer lo que intentas hacer es con una referencia indirecta:

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

Pero como señaló @dave_thompson_085, las matrices suelen ser una mejor manera de hacer este tipo de cosas:

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

Tenga en cuenta que las matrices son una extensión de bash y no están disponibles en shells más básicos.

Respuesta2

Su problema no es un nombre que contiene un número, lo cual funciona bien, sino un nombre que contiene unvariable. Puedes usar eval(lo cual es difícil de hacer bien y fácil de arruinar) o dirección indirecta, x=source_$i; echo "${!x}"en cuyo caso esto es un engaño dematriz bash con variable en el nombreque SX ya colocó automáticamente en la lista relacionada para que usted pueda verlo.

Pero si desea acceder a varias variables relacionadas por número, aún mejor es usar una matriz. Eso es exactamente para lo que están diseñados los arreglos, haciéndolos más convenientes y seguros. Para obtener información sobre matrices en bash, consulte la sección del manual de bash sobre matrices, en su sistema oen la web aquí

información relacionada