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=($@)
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?
$@
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
Tags command-line echo