Mas isso parece funcionar com base em caractere por caractere na v4.1.2. Existe uma maneira de fazê-lo palavra por palavra?
Alexej Magura
@AlexejMagura Não entendo o que você quer dizer. Isso atua sobre os elementos da matriz. Se você tiver elementos de um caractere, ele funcionará "em caracteres". Se cada elemento é uma palavra, funciona em palavras. Você está tentando isso em uma string e não em uma matriz?
terdon
Estou tentando em uma cópia de "$ @", que acho que pode se tornar uma sequência nesse momento, não tenho certeza.
Alexej Magura 5/10
No bash 4.2.46, "${@:1:2}"na verdade , me fornece os argumentos da primeira e da segunda linha de comando . Enquanto isso, "${@:1}"fornece os argumentos completos da linha de comando e "${@:0}"o nome do script, seguido pelos argumentos completos da linha de comando .
Rockallite
@ Rockallite bem, sim. Os segundo e terceiro elementos da $@ matriz são o primeiro e o segundo argumentos. "${@:1}"imprimirá toda a matriz começando com o 2º elemento (o 1º argumento) e ${@:0}toda a matriz começando com o 1º elemento, que é o nome do script. O que você estava esperando?
"$@"
. Suaargv
atribuição seria interrompida se algum argumento contivesse espaços.Respostas:
Você pode usar o mesmo formato de qualquer outra matriz. Para extrair os 2º e 3º elementos de
$@
, você faria:fonte
"${@:1:2}"
na verdade , me fornece os argumentos da primeira e da segunda linha de comando . Enquanto isso,"${@:1}"
fornece os argumentos completos da linha de comando e"${@:0}"
o nome do script, seguido pelos argumentos completos da linha de comando .$@
matriz são o primeiro e o segundo argumentos."${@:1}"
imprimirá toda a matriz começando com o 2º elemento (o 1º argumento) e${@:0}
toda a matriz começando com o 1º elemento, que é o nome do script. O que você estava esperando?