Veo esto en un script de shell.
variable=${@:2}
¿Qué está haciendo?
bash
shell-script
ksh
Lenin Raj Rajasekaran
fuente
fuente

var="my_value"; echo var="${var[@]:2}"; echo "$var"¿Ver la diferencia?Respuestas:
Muestra el contenido de la variable especial
$@, en Bash. Contiene todos los argumentos de línea de comandos, y este comando está tomando todos los argumentos de la segunda sobre y almacenarlos en una variable,variable.Ejemplo
Aquí hay un script de examen.
Ejemplo de ejecución:
Referencias
fuente
vars=( "${@:2}" )$@y${@}son idénticos, aunque este último es la sintaxis "más correcta". Debe usar los corchetes con${@:2}, porque$@:2es ambiguo y, por lo tanto, se interpretaría como${@}:2, lo que no es lo mismo.Esa es una
kshcaracterística que también se encuentra enbashy versiones recientes dezsh.En
kshybash, puede acceder a varios elementos de una matriz mediante el uso de la${array[@]:first:length}sintaxis, que se expande hastalength(olengthse omite) elementos de laarraymatriz (en la lista de elementos de la matriz ordenados numéricamente en los índices), comenzando con el primero con índice mayor o igual afirst. Cuando está en contexto escalar (como aquí en una asignación a una variable escalar), la lista de elementos se une con caracteres de espacio conbashyksh93y con el primer carácter de$IFS(o nada si$IFSestá vacío o espacio si no está configurado) conzsh.Por ejemplo:
$@Es un caso especial.$@es la matriz de parámetros posicionales ($1,$2...). Pero cuando se usa con:,$0también está incluido. Entonces${@:1}es lo mismo que$@, no${@:0}como para otras matrices.En
zsh, es un poco diferente.zshagregó lakshsintaxis solo recientemente por compatibilidad, pero tiene su propia sintaxis para seleccionar rangos de elementos.Contrariamente a
kshybash, laszshmatrices son un tipo de variable diferente de las variables escalares, no son dispersas (zshtiene matrices asociativas como otro tipo de variable) y comienzan en el índice 1 en lugar de 0.Para
zshacceder a los rangos de elementos de matriz con$a[first,last](dondelasttambién puede ser negativo contar hacia atrás desde el final).en
zsh,crea una matriz con 235 elementos, la mayoría de ellos vacíos.
$a[12,50]se expandiría a los elementos 12 a 50, y${a[@]:12:2}solo se expandiría a los elementos (vacío)$a[12]y$a[13]. Como un caso especial, y nuevamente para la portabilidad conksh93ybash,zshtambién acepta un0primer elemento$@y lo trata como tal$0.Por lo tanto, se puede utilizar
${a[@]:x:n}y${@:x:n}portable a través de los 3 conchas, pero sólo para las matrices no escaso, y prestar atención al valor de IFS.fuente