Je vois cela dans un script shell.
variable=${@:2}
Qu'est-ce que ça fait?
bash
shell-script
ksh
Lénine Raj Rajasekaran
la source
la source
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
.Exemple
Voici un script exampe.
Exemple d'exécution:
Les références
la source
vars=( "${@:2}" )
$@
et${@}
sont identiques, bien que cette dernière soit la syntaxe "la plus correcte". Vous devez utiliser les crochets avec${@:2}
, car$@:2
est ambigu et serait donc interprété comme${@}:2
, ce qui n'est pas la même chose.C'est une
ksh
fonctionnalité également présente dansbash
les versions récentes dezsh
.Dans
ksh
etbash
, 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 silength
est omis) des éléments duarray
tableau (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 avecbash
etksh93
et avec le premier caractère de$IFS
(ou rien si$IFS
est vide ou espace s'il n'est pas défini) aveczsh
.Par exemple:
$@
est un cas particulier.$@
est le tableau de paramètres positionnels ($1
,$2
...). Mais lorsqu'il est utilisé avec:
,$0
est é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'azsh
ajouté laksh
syntaxe que récemment pour des raisons de compatibilité, mais possède sa propre syntaxe pour sélectionner des plages d'éléments.Contrairement à
ksh
etbash
, leszsh
tableaux sont un type de variable différent des variables scalaires, ne sont pas rares (zsh
a 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ùlast
peut également être négatif pour compter en arrière à partir de la fin).Dans
zsh
,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é avecksh93
etbash
,zsh
accepte également un0
premier é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.la source