Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[bash] Variable dynamique

2 réponses
Avatar
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/

2 réponses

Avatar
Stephane CHAZELAS
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
Avatar
Ph. Ivaldi
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.