Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#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".


Linux-Mint Qiana 64 (Cinnamon) sur ASUS F2A55/AMD A8-5600K APU

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

Haut de page ↑