
En un script de shell, tengo una lista de variables que he ordenado como $a, $b, $c, etc. Me gustaría imprimir estas variables sin tener que enumerar todas las variables. Mi código actual es el siguiente:
a=1
b=2
c=3
d=4
e=5
f=6
g=7
for x in $a$b$c$d$e$f$g
do
echo "$x"
done
¿Puedo acortar $a$b$c$d$e$f$g a algo que se refiera de $a a $g?
Respuesta1
Usando "mal" eval
:
eval echo \"$(printf '$%s' {a..g})\"
Tenga en cuenta que utilicé comillas de escape que son necesarias para una salida correcta si sus variables deben contener caracteres de espacio.
O utilice el bucle for corregido delprimera respuesta:
for x in {a..g}; do printf "${!x}"; done
O use una matriz en su secuencia de comandos. Es una sintaxis diferente, pero es más fácil de manejar si necesita todos los valores a la vez. He aquí un pequeño ejemplo:
array=(1 2 3 4 x 6)
array+=(7) # add one more
array[4]=5 # modify element at index 4
printf '%s' "${array[@]}"
Tenga en cuenta que las dos últimas printf
declaraciones no terminan con una nueva línea.