Armazenando parte dos argumentos da linha de comando no array do usuário

1

Eu posso fazer isso,

array=(2 46 7 4 2 1 1 1 23 4 5)
store=(${array[*]:5:5})
echo ${store[@]}  # print 1 1 1 23 4 5

Agora, em vez de extrair os 5 elementos da posição 5 de uma matriz de usuário, preciso extrair argumentos da linha de comando de 5 e assim por diante. Eu tentei de maneira semelhante, mas estou recebendo saída vazia

store=(${$[*]:5:5})  # <----------------- Something to be changed here?
echo ${store[@]}  # EMPTY OUTPUT

Qualquer ajuda, como armazenar n args da posição mth em diante em uma matriz?

    
por mtk 28.09.2015 / 11:05

1 resposta

4

Em bash (e também zsh e ksh93 , a forma geral de expansão de parâmetro ou Substring Expansion é:

${parameter:offset:length}

Se o length for omitido, você receberá de offset até o final do parâmetro.

No seu caso:

array=(2 46 7 4 2 1 1 1 23 4 5)
store=( "${array[@]:5}" )
printf '%s\n' "${store[@]}"

irá gerar a partir do elemento 6th para o último elemento.

com $@ :

printf '%s\n' "${@:5}"

irá gerar a partir de $5 até o final dos argumentos posicionais.

Observe também que você precisa citar a variável array para evitar que o operador split+glob em seus elementos.

Com zsh , você pode usar outra sintaxe:

print -rl -- $argv[5,-1]
    
por 28.09.2015 / 11:59