328 votes

Qu'est-ce que $@ en Bash ?

Je pense que la poignée $@ dans un shell script est un tableau de tous les arguments donnés au script. Est-ce vrai ?

Je demande parce que j'utilise normalement les moteurs de recherche pour rassembler des informations, mais je ne peux pas chercher sur Google pour $@ et j'ai pris l'habitude de me faire servir facilement tout.

13 votes

14 votes

Vous devriez faire passer des choses comme 'man bash' dans grep avec l'argument -C fixé à quelque chose de raisonnable, c'est une compétence vraiment utile.

8 votes

La question liée (dont cette question est un doublon) a été posée 2 ans après cette question... Cette question ne devrait-elle pas être un doublon de cette question et non l'inverse ?

257voto

ghostdog74 Points 86060

Oui. Veuillez consulter le page de manuel de Bash (la première chose que vous allez voir) sous Paramètres spéciaux :

Paramètres spéciaux

Le shell traite plusieurs paramètres de manière spéciale. Ces paramètres peuvent uniquement être référencés ; leur affectation n'est pas autorisée.

* Expansion vers les paramètres positionnels, en commençant par un. Lorsque l'expansion se produit à l'intérieur de guillemets doubles, elle se développe en un seul mot avec la valeur de chaque paramètre séparée par le premier caractère de la variable spéciale IFS. C'est-à-dire "$*" est équivalent à "$1c$2c..." , donde c est le premier caractère de la valeur de la variable IFS. Si IFS n'est pas défini, les paramètres sont séparés par des espaces. Si IFS est null, les paramètres sont joints sans séparateurs intermédiaires.

@ S'étend aux paramètres positionnels, en commençant par un. Lorsque l'expansion se produit entre guillemets doubles, chaque paramètre se développe en un mot distinct. C'est-à-dire, "$@" est équivalent à "$1" "$2" ... Si l'expansion entre guillemets se produit à l'intérieur d'un mot, l'expansion du premier paramètre est jointe à la partie initiale du mot original, et l'expansion du dernier paramètre est jointe à la dernière partie du mot original. Lorsqu'il n'y a pas de paramètres positionnels, "$@" y $@ se réduisent à néant (c'est-à-dire qu'ils sont supprimés).

125voto

Thomas Chilinski Points 701

Juste en lisant ça, je n'aurais jamais compris que "$@" se développe en une liste de paramètres distincts. Alors que, "$*" est un paramètre composé de tous les paramètres additionnés.

Si ça n'a toujours aucun sens, faites ceci.

Les paramètres spéciaux de Bash expliqués avec quatre exemples de scripts shell

5 votes

Cet article est incroyablement bien écrit ! Je comprends enfin :) Merci de partager

0 votes

Excellent lien, informatif, compréhensible

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X