#1 Le 20/10/2009, à 08:26
- Geoffrey35
[Bash] Point d'exclamation et variable
Bonjour,
Des fois dans des scripts je vois des trucs comme ca:
${!i}
Pourquoi, avec un point d'exclamation et pas
$(i) ou encore ${i}
Enfin vous l'aurez compris, pourquoi ce point d'exclamation?
Merci de vos réponses.
Dernière modification par Geoffrey35 (Le 20/10/2009, à 08:27)
Ubuntu, c'est pas non plus...
Hors ligne
#2 Le 20/10/2009, à 08:45
- Peck
Re : [Bash] Point d'exclamation et variable
Tu es sur que c'est !i tout court et pas !i@ ou !i* ?
Car cela correspond à la découverte de variable dont le nom commence par i.
Hors ligne
#3 Le 20/10/2009, à 09:43
- Totor
Re : [Bash] Point d'exclamation et variable
Bonjour,
@peck : la syntaxe est bonne
@Geoffrey35 : c'est pour récupérer la valeur de la variable dont le nom est la valeur de la variable i
-- Lucid Lynx --
Hors ligne
#4 Le 20/10/2009, à 09:49
- serged
Re : [Bash] Point d'exclamation et variable
Trouvé dans (l'excellent) bash avancé :
${!variable} Référence de variable indirecte
Ce qui veut dire que :
toto="salut la foule"
titi="toto"
echo ${!titi}
affichera "salut la foule".
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#5 Le 20/10/2009, à 09:56
- incises
Re : [Bash] Point d'exclamation et variable
Il s'agit d'un exemple de référencement indirect.
Tu trouveras des indications là-dessus dans l'excellentissime manuel de Cooper sur Bash.
Voir le site :
http://abs.traduc.org/abs-fr/
(lien vers une traduction en français du manuel, tu y trouveras aussi, vers le haut, dans la rubrique "Résumé", un lien
Version PDF
qui permet d'obtenir la version anglaise la plus récente du manuel de Cooper).
Cooper donne entre autres l'exemple de programme suivant pour éclaircir la notion :
#!/bin/bash
# Indirect variable referencing.
# This has a few of the attributes of references in C++.
a=letter_of_alphabet
letter_of_alphabet=z
echo "a = $a" # Direct reference.
echo "Now a = ${!a}" # Indirect reference.
# The ${!variable} notation is more intuitive than the old
#+ eval var1=\$$var2
echo
t=table_cell_3
table_cell_3=24
echo "t = ${!t}" # t = 24
table_cell_3=387
echo "Value of t changed to ${!t}" # 387
# No 'eval' necessary.
# This is useful for referencing members of an array or table,
#+ or for simulating a multi-dimensional array.
# An indexing option (analogous to pointer arithmetic)
#+ would have been nice. Sigh.
exit 0
# See also, ind-ref.sh example.
Dernière modification par incises (Le 20/10/2009, à 11:54)
Hors ligne