comment boucler des arguments dans un script bash

13

J'aimerais écrire un script bash avec un nombre inconnu d'arguments.

Comment puis-je passer en revue ces arguments et faire quelque chose avec eux?

Une mauvaise tentative ressemblerait à ceci:

#!/bin/bash
for i in $args; do 
    echo $i
done
    
posée rubo77 14.06.2013 - 00:33
la source

2 réponses

26

Il existe une syntaxe spéciale pour cela:

for i do
  echo "$i"
done

Plus généralement, la liste des paramètres du script ou de la fonction en cours est disponible via la variable spéciale [email protected] .

for i in "[email protected]"; do
  echo "$i"
done

Notez que vous avez besoin des guillemets autour de [email protected] , sinon les paramètres sont développés avec des caractères génériques et une division du champ. "[email protected]" est magique: malgré les guillemets doubles, il se développe en autant de champs qu'il y a de paramètres.

print_arguments () {
  for i in "[email protected]"; do echo "$i"; done
}
print_arguments 'hello world' '*' 'special   !\characters'    # prints 3 lines
print_arguments ''                                            # prints one empty line
print_arguments                                               # prints nothing
    
réponse donnée 14.06.2013 - 01:45
la source
5
#! /usr/bin/env bash
for f in "[email protected]"; do
  echo "$f"
done

Vous devriez citer [email protected] car il est possible que les arguments contiennent des espaces (ou des nouvelles lignes, etc.) si vous les citez, ou leur échappez avec un \ . Par exemple:

./myscript one 'two three'

C'est deux arguments plutôt que trois, à cause des citations. Si vous ne citez pas [email protected] , ces arguments seront décomposés dans le script.

    
réponse donnée 14.06.2013 - 00:42
la source

Lire d'autres questions sur les étiquettes