Escolhendo o elemento da matriz específica

1

Acabei de começar a ler sobre "$@" e "$*" , queria saber se posso apontar especificamente para um elemento na matriz "$@" . Como sem usar qualquer loop, eu quero ser capaz de escolher o elemento número 3 de "$@" . Existe uma maneira de fazer isso como "$1+@" ou algo assim? Eu já sei sobre "${1}" , mas quero saber especificamente sobre "$@" e "$*" . Tentei pesquisar, mas não encontrei nada relacionado a isso.

    
por GypsyCosmonaut 12.07.2017 / 02:36

3 respostas

1

Diz-se que os parâmetros posicionais não são um array.
E o caminho que existe para defini-los é via set . Nenhum outro array precisa disso.

$ set -- one two t33 f44
$ printf '%s\n' "$@"
one
two
t33
f44

Mas pelo menos no bash (e no ksh e zsh), eles podem ser selecionados da seguinte maneira:

$ set -- one two t33 f44
$ echo "${@:2:1}"
two
$ echo "${@:2:2}"
two t33
    
por 12.07.2017 / 03:14
1

$@ não é uma matriz: é apenas uma lista dos argumentos. No bash, você pode criar uma matriz, inicializá-la com os valores de $@ e, em seguida, usar a indexação:

declare -a foo=($@)

echo ${foo[2]}

Os índices da matriz começam em 0, então o acima mostra o terceiro argumento para o script.

    
por 12.07.2017 / 03:02
0

Essencialmente, você não pode. O problema é que $* e $@ não são matrizes ; são variáveis simples . Assim, não é possível indexá-los.

Seus valores são apenas strings, definidos de maneiras ligeiramente diferentes. $1 , $2 , etc. dão acesso aos componentes individuais.

    
por 12.07.2017 / 03:05

Tags