web-dev-qa-db-fra.com

Qu'est-ce que $ @ in Bash?

Je pense que le descripteur $@ dans un script Shell est un tableau de tous les arguments donnés au script. Est-ce vrai?

Je pose la question parce que j’utilise normalement les moteurs de recherche pour collecter des informations, mais je ne peux pas rechercher Google dans le code $@, et j’ai développé un comportement trop personnalisé pour que tout soit facilement servi.

165
vecvan

Oui. Veuillez consulter le page de manuel de bash (la première chose à laquelle vous allez) sous Paramètres spéciaux

Paramètres spéciaux

Le shell traite spécialement plusieurs paramètres. Ces paramètres ne peuvent être référencés que; leur assignation n'est pas autorisée.

* Se développe jusqu'aux paramètres de position, en commençant par un. Lorsque le développement se produit entre guillemets doubles, il se développe en un seul mot avec la valeur de chaque paramètre séparé par le premier caractère de la variable spéciale IFS. Autrement dit, "$*" est équivalent à "$1c$2c...", où 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.

@ Se développe jusqu'aux paramètres de position, en commençant par un. Lorsque le développement se produit entre guillemets doubles, chaque paramètre se développe en un mot distinct. Autrement dit, "$@" est équivalent à "$1""$2" ... Si le développement entre guillemets a lieu dans un mot, le développement du premier paramètre est joint au début de celui-ci. Word et l’extension du dernier paramètre est jointe à la dernière partie du mot original. Lorsqu'il n'y a pas de paramètres de position, "$@" et $@ se développent à néant (c'est-à-dire qu'ils sont supprimés).

129
ghostdog74

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

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

http://www.thegeekstuff.com/2010/05/bash-Shell-special-parameters/

37
Thomas Chilinski