Comment faire passer la fonction 3 arguments au lieu de quatre? La citation d'arguments dans un script de corps ne m'aide pas. Exemple script corps de test.sh:Repasser des arguments BASH avec des guillemets dans la fonction
func1(){
echo "Func1: Amount arguments: $#, Passed arguments: [email protected]";
for i in [email protected]; do
echo "ARG=$i";
done;
}
echo "Body: Amount arguments: $#, Passed arguments: [email protected]";
func1 [email protected];
# quoting with single or double quote
res="";
for i in "${@}"; do
# try to figure out if quoting was required for the $i:
grep -q "[[:space:]]" <<< "$i" && res="${res} \"${i}\"" || res="${res} ${i}";
done;
echo "Quoted arguments: $res";
func1 $res;
i exécution du script avec les arguments suivants:
bash ./test.sh 1 2 "3 4"
Résultat:
Body: Amount arguments: 3, Passed arguments: 1 2 3 4
Func1: Amount arguments: 4, Passed arguments: 1 2 3 4
ARG=1
ARG=2
ARG=3
ARG=4
Quoted arguments: 1 2 "3 4"
Func1: Amount arguments: 4, Passed arguments: 1 2 "3 4"
ARG=1
ARG=2
ARG="3
ARG=4"
Je veux obtenir le troisième argument que "3 4" . Comment faire? Je vous remercie.
Hmmm ... Cela fonctionne vraiment, si citation - "$ @". C'est la meilleure solution pour moi, il n'y a pas besoin de code supplémentaire. C'est étrange, mais plus tôt j'ai essayé de le faire et je n'ai pas réussi, mais maintenant j'ai vérifié que tout fonctionne bien. Je vous remercie! – dva
Bien que les autres solutions soient plus génériques pour les fonctions imbriquées, cela devrait suffire pour votre code. Remarquez aussi les guillemets sur la boucle 'for' (ceux que vous avez probablement oubliés lors des tentatives précédentes). –
S'il vous plaît envisager [en acceptant la réponse] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) si c'était utile. –