GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Dynamic (variable) ¿Nombres de variables?

Quiero crear dinámicamente una secuencia de cadenas manipulando una matriz de elementos y creando algún procedimiento aritmético.

for name in FIRST SECOND THIRD FOURTH FIFTH; do
    $name = $(( $6 + 1 ))
    $name = "${$name}q;d"
    echo "${$name}"; printf "n"
done

El resultado deseado sería el siguiente por $6 es igual a .

1q;d
2q;d
3q;d
4q;d
5q;d

Pero me sale este error

reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution

Supongo que es algo simple. Solía ​​funcionar cuando hacía algo como

FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"

Respuesta aceptada:

En primer lugar, no puede haber ningún espacio alrededor de = en la declaración de variables en bash .

Para obtener lo que desea, puede usar eval .

Por ejemplo, un script de muestra como el suyo:

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    eval "$name"="'$(( $i + 1 ))q;d'"
    printf '%sn' "${!name}"
    i=$(( $i + 1 ))
done

Impresiones :

1q;d
2q;d
3q;d
4q;d
5q;d

Usa eval con cautela, algunas personas lo llaman malvado por alguna razón válida.

declare también funcionaría :

#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
    declare "$name"="$(( $i + 1 ))q;d"
    printf '%sn' "${!name}"
    i=$(( $i + 1 ))
done

también imprime:

1q;d
2q;d
3q;d
4q;d
5q;d

Linux
  1. Bash secuencias de comandos (I)

  2. ¿Por qué es legal establecer una variable antes de un comando en Bash?

  3. ¿Usando una referencia a una variable de cadena Bash en Sed?

  4. ¿Paréntesis simple en la asignación de variables Bash?

  5. ¿Cómo pruebo si una variable es un número en Bash?

Declaración Bash declare:sintaxis y ejemplos

Variable de exportación de bash

Bash printf - Cómo imprimir una variable en Bash

Bash Scripting - Variables explicadas con ejemplos

Cómo establecer la variable de entorno en Bash

Código de salida de asignación de variables a sustitución de comandos en Bash