Bash: segmento de parámetros posicionales


19

¿Cómo puedo obtener una porción de $@Bash sin tener que copiar primero todos los parámetros posicionales a otra matriz como esta?

argv=( "$@" )
echo "${argv[@]:2}";

1
Indique siempre "$@". Su argvasignación se rompería si algún args contuviera espacios.
jordanm

Respuestas:


31

Puede usar el mismo formato que para cualquier otra matriz. Para extraer los elementos segundo y tercero $@, haría:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
Pero esto parece funcionar char por char en v4.1.2, ¿hay alguna manera de hacerlo palabra por palabra?
Alexej Magura

@AlexejMagura No entiendo lo que quieres decir. Eso actúa sobre los elementos de la matriz. Si tiene elementos de un carácter, funcionará "en caracteres". Si cada elemento es una palabra, funciona en palabras. ¿Quizás intentas esto en una cadena y no en una matriz?
terdon

Lo estoy probando en una copia de "$ @", que creo que podría convertirse en una cadena en ese momento, no estoy seguro.
Alexej Magura

En bash 4.2.46, en "${@:1:2}"realidad me da los argumentos de la primera y segunda línea de comando . Mientras tanto, "${@:1}"me da los argumentos completos de la línea de comandos y "${@:0}"me da el nombre del script seguido de los argumentos completos de la línea de comandos .
Rockallite

@Rockallite bien, sí. Los elementos segundo y tercero de la $@ matriz son los argumentos primero y segundo. "${@:1}"imprimirá la matriz completa a partir del segundo elemento (el primer argumento) y ${@:0}la matriz completa a partir del primer elemento, que es el nombre del script. ¿Que estabas esperando?
terdon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.