Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

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

#1 Le 20/10/2009, à 09:26

[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, à 09:27)


Ubuntu, c'est pas non plus...

Hors ligne

#2 Le 20/10/2009, à 09:45

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, à 10:43

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, à 10:49

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 Maya 64 Cinnamon sur Toshiba Satellite P200-1BY. Linux-Mint  Nadia 64 Cinnamon sur Compaq Presario SR5617FR

Hors ligne

#5 Le 20/10/2009, à 10:56

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, à 12:54)

Hors ligne

Haut de page ↑