GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Dynamic (variable) Noms des variables ?

Je souhaite créer dynamiquement une séquence de chaînes en manipulant un tableau d'éléments et en créant une procédure arithmétique.

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

Le résultat souhaité serait le suivant pour $6 est égal à .

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

Mais j'obtiens cette erreur

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

Je suppose que c'est quelque chose de simple. Cela fonctionnait quand je faisais quelque chose comme

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

Réponse acceptée :

Tout d'abord il ne peut pas y avoir d'espace autour de = dans la déclaration de variable dans bash .

Pour obtenir ce que vous voulez, vous pouvez utiliser eval .

Par exemple un exemple de script comme le vôtre :

#!/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

Impressions :

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

Utilisez eval avec prudence, certaines personnes appellent cela le mal pour une raison valable.

declare fonctionnerait aussi :

#!/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

imprime également :

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

Linux
  1. Utilisation d'une référence à une variable de chaîne Bash dans Sed ?

  2. Parenthèse unique dans l'affectation de variables Bash ?

  3. Caractères autorisés dans les noms de variables d'environnement Linux

  4. La redirection de la sortie de la commande vers une variable dans bash échoue

  5. passer grep dans une variable bash

Bash declare Statement :Syntaxe et exemples

Variable d'exportation bash

Bash printf - Comment imprimer une variable dans Bash

Bash Scripting - Variables expliquées avec des exemples

Comment définir une variable d'environnement dans Bash

Vérifier si une variable existe dans une liste dans Bash