[bash] Variable dynamique

Le
Ph. Ivaldi
Bonjour,

Le code suivant
8<8<8<8<8<8<8<8<8<
#!/bin/bash

prefix='pre_'
valeur='foo bar'

eval "${prefix}var="$valeur""

tmp="${prefix}var"
var=${!tmp}

echo $pre_var # donne foo bar
echo $var # donne aussi foo bar
8<8<8<8<8<8<8<8<8<

crée une variable, ici pre_var, dont le nom dépend de la valeur de
$prefix.
Ensuite la syntaxe ${!tmp} permet d'utiliser cette variable.

Je n'ai pas besoin d'un tel mécanisme c'est juste pour comprendre,
pour ma culture:
1. y-a-t-il plus simple pour faire cela ?
2. comment peut-on obtenir un comportement similaire à
var=${!tmp} sans passer par une variable auxiliaire.

Je pensais à
var=$(eval 'echo ${'${prefix}var'}')
mais j'ose à peine l'écrire

Merci,
--
Philippe Ivaldi.
http://www.piprime.fr/
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane CHAZELAS
Le #20322541
2009-10-09, 15:12(+02), Ph Ivaldi:
Bonjour,

Le code suivant
8<------8<------8<------8<------8<------8<------8<------8<------8<------
#!/bin/bash

prefix='pre_'
valeur='foo bar'

eval "${prefix}var="$valeur""

tmp="${prefix}var"
var=${!tmp}

echo $pre_var # donne foo bar
echo $var # donne aussi foo bar
8<------8<------8<------8<------8<------8<------8<------8<------8<------

crée une variable, ici pre_var, dont le nom dépend de la valeur de
$prefix.
Ensuite la syntaxe ${!tmp} permet d'utiliser cette variable.

Je n'ai pas besoin d'un tel mécanisme... c'est juste pour comprendre,
pour ma culture:
1. y-a-t-il plus simple pour faire cela ?
2. comment peut-on obtenir un comportement similaire à
var=${!tmp} sans passer par une variable auxiliaire.

Je pensais à
var=$(eval 'echo ${'${prefix}var'}')
mais j'ose à peine l'écrire...


[...]

eval "var=$${prefix}var"
eval "echo "$${prefix}var""

--
Stéphane
Ph. Ivaldi
Le #20322521
Le 09 octobre 2009, Stephane CHAZELAS écrivit :

eval "var=$${prefix}var"
eval "echo "$${prefix}var""



Évidemment !
Mais pourquoi n'y ai-je pas pensé ?
Merci.
Publicité
Poster une réponse
Anonyme