Una asignación de variable tiene la forma de un nombre de variable, seguido del signo igual, seguido del valor (opcional).
Esta es una tarea válida:
ABC=123
"$x"1=1
no es una asignación válida, porque "$x"1
no es un nombre de variable. Puede ser eval uated a un nombre de variable, pero no lo es. El caparazón, de hecho, cree que es un comando.
Una forma de hacer lo que quieres lograr es esta:
eval "$x"1=1
Otra forma en bash (pero no en otros shells) es:
declare "$x"1=1
O también (de nuevo bash-only):
let "$x"1=1
(No hay mucha diferencia en su caso).
Pero, como señaló Jakuje en los comentarios , es probable que desee ir con matrices, si su shell las tiene (ksh, bash o zsh).
Por completitud:
eval
ejecuta comandos arbitrarios. Entonces, si en el lado derecho del signo igual tiene una variable que se expande a algún comando, ese comando se ejecutará. El siguiente código:
x=a
y='$(echo hello)'
eval "$x=$y"
es equivalente a a=hello
.
declare
es un bash incorporado para asignar variables y no ejecutará ningún comando. El siguiente código:
x=a
y='$(echo hello)'
declare "$x=$y"
es equivalente a a='$(echo hello)'
.
let
es similar a declare
que no ejecuta comandos. Pero al contrario de declare
, let
puede usarse para operaciones aritméticas:
let a="1 + 2"
es equivalente a a=3
.