Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

pingouinux a écrit :

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 smile


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

percherie #7 a écrit :

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