Je vois cela dans un script shell.
variable=${@:2}
Qu'est-ce que ça fait?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Regarde la différence?
Je vois cela dans un script shell.
variable=${@:2}
Qu'est-ce que ça fait?
var="my_value"; echo var="${var[@]:2}"; echo "$var"Regarde la différence?
Réponses:
Il montre le contenu de la variable spéciale $@, dans Bash. Elle contient tous les arguments de ligne de commande, et cette commande prend tous les arguments de l'autre sur et en les stockant dans une variable, variable.
Voici un script exampe.
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
Exemple d'exécution:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
vars=( "${@:2}" )
$@et ${@}sont identiques, bien que cette dernière soit la syntaxe "la plus correcte". Vous devez utiliser les crochets avec ${@:2}, car $@:2est ambigu et serait donc interprété comme ${@}:2, ce qui n'est pas la même chose.
C'est une kshfonctionnalité également présente dans bashles versions récentes de zsh.
Dans kshet bash, vous pouvez accéder à plusieurs éléments d'un tableau à l'aide de la ${array[@]:first:length}syntaxe, qui s'étend jusqu'à length(ou tous si lengthest omis) des éléments du arraytableau (dans la liste des éléments du tableau triés numériquement sur les index), en commençant par le premier avec un indice supérieur ou égal à first. En contexte scalaire (comme ici dans une affectation à une variable scalaire), la liste des éléments est jointe avec des caractères d'espace avec bashet ksh93et avec le premier caractère de $IFS(ou rien si $IFSest vide ou espace s'il n'est pas défini) avec zsh.
Par exemple:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@est un cas particulier. $@est le tableau de paramètres positionnels ( $1, $2...). Mais lorsqu'il est utilisé avec :, $0est également inclus. C'est ${@:1}la même chose que $@, pas ${@:0}comme pour les autres tableaux.
En zsh, c'est légèrement différent. n'a zshajouté la kshsyntaxe que récemment pour des raisons de compatibilité, mais possède sa propre syntaxe pour sélectionner des plages d'éléments.
Contrairement à kshet bash, les zshtableaux sont un type de variable différent des variables scalaires, ne sont pas rares ( zsha des tableaux associatifs comme un autre type de variable) et commencent à l'index 1 au lieu de 0.
Pour zsh, vous accédez aux plages d'éléments de tableau avec $a[first,last](où lastpeut également être négatif pour compter en arrière à partir de la fin).
Dans zsh,
a[23]=a a[5]=b a[235]=c a[45]=d
crée un tableau avec 235 éléments, la plupart d'entre eux vides. $a[12,50]s'étendrait aux éléments 12 à 50 et ${a[@]:12:2}ne s'étendrait qu'aux éléments (vide) $a[12]et $a[13]. Comme cas spécial, et encore pour la portabilité avec ksh93et bash, zshaccepte également un 0premier élément pour $@et le traite comme $0.
Ainsi, vous pouvez utiliser ${a[@]:x:n}et ${@:x:n}porter sur les 3 shells, mais uniquement pour les tableaux non clairsemés, et faire attention à la valeur d'IFS.