Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Gestion des paramètres de position En masse

Il est parfois utile de gérer tous les paramètres de position en groupe. Par exemple, nous pourrions vouloir écrire un « wrapper » autour d'un autre programme. Cela signifie que nous créons un script ou une fonction shell qui simplifie l'invocation d'un autre programme. Le wrapper, dans ce cas, fournit une liste d'options de ligne de commande obscures, puis passe une liste d'arguments au programme de niveau inférieur.

Le shell fournit deux paramètres spéciaux à cet effet. Ils s'étendent tous les deux à la liste complète des paramètres de position, mais diffèrent de manière assez subtile. Elles sont:


Tableau 32-1 : Les paramètres spéciaux * et @


Paramètre Description

Paramètre Description

$* Se développe dans la liste des paramètres de position, en commençant par 1. Lorsqu'il est entouré de guillemets doubles, il se développe en une chaîne entre guillemets contenant tous les paramètres de position, chacun séparé par le premier caractère de la variable shell IFS (par défaut un espace personnage).


image

$@ Se développe dans la liste des paramètres positionnels, en commençant par 1. Lorsqu'il est entouré de guillemets doubles, il développe chaque paramètre positionnel en un mot séparé entouré de guillemets doubles.


image


Voici un script qui montre ces paramètres spéciaux en action :

Gestion des paramètres de position en masse


#! / Bin / bash

# posit-params3 : script pour démontrer $* et $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "mot" "mots avec espaces"

#! / Bin / bash

# posit-params3 : script pour démontrer $* et $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "mot" "mots avec espaces"


Dans ce programme assez alambiqué, nous créons deux arguments : « mot » et « mots avec des espaces », et les passons au pass_params fonction. Cette fonction, à son tour, les transmet au print_params fonction, en utilisant chacune des quatre méthodes disponibles avec les paramètres spéciaux $* ainsi que $@. Lorsqu'il est exécuté, le script révèle les différences :


image

[moi@linuxbox ~]$ pos-param3


$* :


$1

=

mot

$2

=

des mots

$3

=

avec

$4

=

espaces

"$*" :


$1

=

mot mots avec des espaces

$2

=

$3

=

$4

=

$@ :


$1

=

mot

$2

=

des mots

$3

=

avec

$4

=

espaces

"$@" :

$1 = mot


$2 = mots avec des espaces

3 $ =

4 $ =

$2 = mots avec des espaces

3 $ =

4 $ =


Avec nos arguments, les deux $* ainsi que $@ produire un résultat de quatre mots :

mot mots avec des espaces

"$*" produit un résultat en un mot :

"mot mots avec des espaces"

"$@" produit un résultat en deux mots :

"mot" "mots avec espaces"

qui correspond à notre intention réelle. La leçon à tirer de ceci est que même si le shell fournit quatre façons différentes d'obtenir la liste des paramètres de position, "$@" est de loin le plus utile pour la plupart des situations, car il préserve l'intégrité de chaque paramètre de position.


Meilleur système d'exploitation Cloud Computing chez OnWorks :