#1 Le 16/05/2017, à 12:28
- abelthorne
[résolu] Obtenir la valeur d'une variable construite ?
Bonjour,
J'essaie de faire un script et je suis empêtré dans la manipulation des variables. Disons que j'ai l'exemple basique suivant :
#!/bin/bash
function test{
couleur_rouge=ff0000
couleur_vert=00ff00
couleur_bleu=0000ff
echo xxx
}
test vert
La fonction test récupère donc "vert" dans $1. Par quoi est-ce qu'il faudrait que je remplace "xxx" dans echo pour qu'il m'affiche ce qui suit ?
00ff00
Au mieux, j'arrive à affiche "vert" ou "couleur_vert" mais pas la valeur de $couleur_vert...
Question subsidiaire : est-ce que c'est possible en bash de créer des tableaux avec des index non numériques ? Quelque chose du genre :
couleur[rouge]=ff0000
couleur[vert]=00f000
couleur[bleu]=0000ff
Dernière modification par abelthorne (Le 16/05/2017, à 13:48)
Hors ligne
#2 Le 16/05/2017, à 12:50
- pingouinux
Re : [résolu] Obtenir la valeur d'une variable construite ?
Bonjour,
Pour ta première question
function montest(){
couleur_rouge=ff0000
couleur_vert=00ff00
couleur_bleu=0000ff
var=couleur_$1
echo "$var=${!var}"
}
montest vert
montest rouge
montest bleu
La réponse à la question subsidiaire est oui (voir les tableaux associatifs).
Ajouté :
montest2(){
declare -A tab
tab[rouge]=ff0000
tab[vert]=00ff00
tab[bleu]=0000ff
var=$1
echo "$var => ${tab[$var]}"
}
montest2 vert
montest2 rouge
montest2 bleu
Dernière modification par pingouinux (Le 16/05/2017, à 12:57)
Hors ligne
#3 Le 16/05/2017, à 13:17
- abelthorne
Re : [résolu] Obtenir la valeur d'une variable construite ?
Ah, super, avec les tableaux ça me simplifie la vie.
Pour ta réponse à la première question, je ne comprends pas bien la syntaxe de echo "$var=${!var}" : à quoi correspond le point d'exclamation ?
Hors ligne
#4 Le 16/05/2017, à 13:45
- pingouinux
Re : [résolu] Obtenir la valeur d'une variable construite ?
Voici un extrait de man bash, rubrique Parameter Expansion :
If the first character of parameter is an exclamation point (!), it introduces a level
of variable indirection. Bash uses the value of the variable formed from the rest of
parameter as the name of the variable; this variable is then expanded and that value
is used in the rest of the substitution, rather than the value of parameter itself.
This is known as indirect expansion.
Hors ligne
#5 Le 16/05/2017, à 13:47
- abelthorne
Re : [résolu] Obtenir la valeur d'une variable construite ?
Ok. Merci, c'est donc le point de détail qu'il me manquait depuis le début.
Dernière modification par abelthorne (Le 16/05/2017, à 13:47)
Hors ligne