#1 Le 17/01/2008, à 22:32
- jak0lantash
[RESOLU][bash] Tableau de chaine en parametre d'une fonction
Bonjour,
Je suis un peu un noob en shell script, et j'aurai besoin de votre aide pour un truc tout simple je pense.
J'ai cherché dans plein plein d'endroit sur le net, mais j'arrive pas à trouver ma réponse.
Si vous pouviez m'aider...
Le problème est simple. J'ai un tableau composé de deux chaines de caractères :
services_apache={[0]="\"/etc/init.d/apache2 stop\"" [1]="/etc/init.d/apache2 start"}
Je cache pas ce que je veux faire avec, j'ai donc laissé les chaines d'origine. Vous avez sans doute remarquez que les deux éléments étaient pas formattés pareil, c'est juste pour montrer que le résultat est le même (que ça ne marche pas comme prévu ^^)...
Je souhaiterai passer ce tableau en paramètre à une fonction, et que cette fonction reçoive bien un tableau avec les deux chaines (correctement) séparées. Mais j'y arrive pas. Dans la fonction, j'ai toujours les 4 chaines séparées ("/etc/init.d/apache2" "stop" "/etc/init.d/apache2" "start") !! et des fois j'ai même que les 2 premières. Please Help.
Voici mon code (de test) :
Je définie ensuite la fonction :
testparams() {
for arg in "$@"
do
echo "arg quote at $arg"
done
for arg in $@
do
echo "arg $arg"
done
for arg in "$*"
do
echo "arg quote star $arg"
done
for arg in $*
do
echo "arg star $arg"
done
}
Et enfin, j'appel :
echo "--- service_apache[at] ---"
testparams ${services_apache[@]}
echo ""
echo "--- service_apache[star] ---"
testparams ${services_apache[*]}
echo ""
echo "--- service_apache ---"
testparams ${services_apache}
Voici mon résultat :
--- service_apache[at] ---
arg quote at "/etc/init.d/apache2
arg quote at stop"
arg quote at /etc/init.d/apache2
arg quote at start
arg "/etc/init.d/apache2
arg stop"
arg /etc/init.d/apache2
arg start
arg quote star "/etc/init.d/apache2 stop" /etc/init.d/apache2 start
arg star "/etc/init.d/apache2
arg star stop"
arg star /etc/init.d/apache2
arg star start
--- service_apache[star] ---
arg quote at "/etc/init.d/apache2
arg quote at stop"
arg quote at /etc/init.d/apache2
arg quote at start
arg "/etc/init.d/apache2
arg stop"
arg /etc/init.d/apache2
arg start
arg quote star "/etc/init.d/apache2 stop" /etc/init.d/apache2 start
arg star "/etc/init.d/apache2
arg star stop"
arg star /etc/init.d/apache2
arg star start
--- service_apache ---
arg quote at "/etc/init.d/apache2
arg quote at stop"
arg "/etc/init.d/apache2
arg stop"
arg quote star "/etc/init.d/apache2 stop"
arg star "/etc/init.d/apache2
arg star stop"
Merci pour vous réponses ou pistes...
Dernière modification par jak0lantash (Le 09/07/2008, à 23:40)
Hors ligne
#2 Le 17/01/2008, à 22:55
- Alain.g
Re : [RESOLU][bash] Tableau de chaine en parametre d'une fonction
Salut
Il bien utiliser @ mais également protéger ${services_apache[@]} par des guillemets :
#!/bin/bash
services_apache=( "/etc/init.d/apache2 stop" "/etc/init.d/apache2 start" )
testparams() {
for arg in "$@"
do
echo "arg quote at $arg"
done
}
testparams "${services_apache[@]}"
ou alors changer la valeur d'IFS, ce qui permettrait de se passer des guillemets et de choisir * ou @
#!/bin/bash
IFS=$'\n'
services_apache=( /etc/init.d/apache2\ stop /etc/init.d/apache2\ start )
testparams() {
for arg in $*
do
echo arg star $arg
done
}
testparams ${services_apache[*]}
#!/bin/bash
IFS=$'\n'
services_apache=( /etc/init.d/apache2\ stop /etc/init.d/apache2\ start )
testparams() {
for arg in $@
do
echo arg at $arg
done
}
testparams ${services_apache[@]}
Dernière modification par Alain.g (Le 17/01/2008, à 23:07)
Xubuntu Karmic !
Hors ligne
#3 Le 17/01/2008, à 23:05
- jak0lantash
Re : [RESOLU][bash] Tableau de chaine en parametre d'une fonction
Merci pour ta réponse rapide... et correcte !
C'est parfait, merci beaucoup. Je vais pouvoir reprendre la suite du script. Merci merci merci ^^
Hors ligne