#1 Le 23/03/2012, à 13:11
- percherie
[BASH] "enfermer" une variable dans une commande
Bonjour,
En codant je me suis rendu compte qu'une variable défini dans une commande reste définie. J'aimerai savoir si je peut faire en sorte pour qu'elle soit utilisée UNIQUEMENT à l'intérieure d'une commande.
Autrement, je pensait réinitialiser les variables à la fin de la dite commande. Est ce que c'est acceptable comme méthode ?
Voici un exemple de code crée pour l'occasion, on peut voir qu'une fois la variable $var1 est défini, elle le reste lors d'un deuxième appel de la même commande :
#!/bin/bash
add_source() {
if [[ $1 == "obligatoire" ]] ; then
echo -n "Question 1 : "
read var1
fi
if [[ $1 == "facultatif" ]] ; then
echo -n "Question 2 : "
read var2
fi
echo "Réponse 1 : " $var1
echo "Réponse 2 : " $var2
}
add_source "obligatoire"
add_source "obligatoire"
add_source "facultatif"
add_source "facultatif"
add_source "obligatoire"
add_source "obligatoire"
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#2 Le 23/03/2012, à 13:15
- Hizoka
Re : [BASH] "enfermer" une variable dans une commande
il faut utiliser un sous processus :
function test
{
var=$1
echo $var
}
test premier
=> premier
echo $var
=> premier
unset var
( test premier )
=> premier
echo $var
=>
ou
function test
{
( var=$1
echo $var )
}
test deuxieme
=> deuxieme
echo $var
=>
Dernière modification par Hizoka (Le 23/03/2012, à 13:16)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 23/03/2012, à 13:35
- pingouinux
Re : [BASH] "enfermer" une variable dans une commande
Salut,
Autres méthodes :
test() { local var=$1; echo $var; }
test() ( var=$1; echo $var; )
Hors ligne
#4 Le 23/03/2012, à 13:52
- percherie
Re : [BASH] "enfermer" une variable dans une commande
Cool, je ne connaissait pas la méthode des sous processus, je vais me documenter dessus.
Je vais opter pour la seconde syntaxe, cela évitera les oublis lors de la conception de code.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#5 Le 23/03/2012, à 13:56
- percherie
Re : [BASH] "enfermer" une variable dans une commande
Salut,
Autres méthodes :test() { local var=$1; echo $var; }
test() ( var=$1; echo $var; )
Excellent, je ne savait pas qu'on pouvait remplacer les crochets par des parenthèses, ça simplifie la lecture.
Merci pour tout à vous deux.
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#6 Le 23/03/2012, à 13:58
- Hizoka
Re : [BASH] "enfermer" une variable dans une commande
Pour le coup, je ne le savais pas non plus
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 23/03/2012, à 16:33
- percherie
Re : [BASH] "enfermer" une variable dans une commande
Question complémentaire : Avec cette solution est il possible d'exporter une variable spécifique ?
J'ai fait un essais avec "${var1[@]}" sans grand succès
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne
#8 Le 23/03/2012, à 16:58
- pingouinux
Re : [BASH] "enfermer" une variable dans une commande
Avec cette solution est il possible d'exporter une variable spécifique ?
De quelle solution parles-tu ? Avec test() (...), aucune variable ne remonte dans le shell appelant. Avec test() {...}, il suffit de ne déclarer en local que les variables qui ne doivent pas remonter.
Hors ligne
#9 Le 23/03/2012, à 17:08
- percherie
Re : [BASH] "enfermer" une variable dans une commande
Merci pour la précision, je n'avais pas envisager les choses de ce coté là ;-p
Nomade en camion utilisant Ubuntu. Si vous souhaitez suivre mes voyages : http://toutenkamion.net/
Hors ligne