comment parcourir les arguments dans un script bash

16

Je voudrais écrire un script bash avec une quantité inconnue d'arguments.

Comment puis-je parcourir ces arguments et en faire quelque chose?

Une mauvaise tentative ressemblerait à ceci:

#!/bin/bash
for i in $args; do 
    echo $i
done
rubo77
la source

Réponses:

28

Il existe une syntaxe spéciale pour cela:

for i do
  printf '%s\n' "$i"
done

Plus généralement, la liste des paramètres du script ou de la fonction courante est disponible via la variable spéciale $@.

for i in "$@"; do
  printf '%s\n' "$i"
done

Notez que vous avez besoin des guillemets doubles $@, sinon les paramètres subissent une expansion générique et une division de champ. "$@"est magique: malgré les doubles guillemets, il se développe en autant de champs qu'il y a de paramètres.

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing
Gilles 'SO- arrête d'être méchant'
la source
5
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Vous devez citer $@car il est possible que les arguments contiennent des espaces (ou des retours à la ligne, etc.) si vous les citez ou les échappez avec un \. Par exemple:

./myscript one 'two three'

C'est deux arguments plutôt que trois, en raison des citations. Si vous ne citez pas $@, ces arguments seront décomposés dans le script.

evilsoup
la source
2
Il y a un raccourci pour celafor f; do ...
glenn jackman