Basic doubt in echo statement

0

Acabei de começar a aprender unix e me deparei com dúvidas muito básicas em argumentos de linha de comando.

Suponha que no meu script eu faça:

echo $@ #Now this prints all the command line arguments

args=$@ #Args array will take the command line argument array from $@

echo $args 

Aqui tenho dúvida na última declaração. echo arrayname , pois deve imprimir apenas o primeiro elemento do índice, mas por que ele está mostrando a matriz completa?

Se eu pegar uma matriz normal no unix e dizer que o nome da array é ARR, agora se eu usar echo ARR, ele mostrará o primeiro elemento e não todos os elementos. Então, por que o comportamento é diferente com args acima?

    
por rahul sharma 13.04.2018 / 20:55

2 respostas

0

Ele está imprimindo todos os elementos porque você definiu uma variável e não uma matriz. Para definir uma matriz, você precisa fazer:

args=($@)
    
por 13.04.2018 / 20:56
1

$@ se comporta de maneira diferente de uma variável de matriz comum sem indexar porque $@ tem um "índice integrado": significa sempre "todos os elementos".

set -- a b c
echo $@
    a b c
set -x
var=$@
    + var='a b c'
ar=(a b c)
    + ar=(a b c)
echo $ar
    + echo a
    a
    
por 13.04.2018 / 21:08