removido
(usa Nenhuma)
Enviado em 04/10/2005 - 18:20h
Eu entendi a explicação teórica, mas não consegui repetir os procedimentos.
Bem, eu executei ..
#!/bin/bash
for x in $*; do
echo $x
done
e
#!/bin/bash
for x in $@; do
echo $x
done
no meu caso o resultado foi exatamente o mesmo para os dois scripts:
./scritp joao maria jose
joao
maria
jose
Aliás eu tinha realizado esse teste antes e continuou do mesmo jeito...
Entretanto.
Entre o post original e sua resposta... eu vi o seguinte
untar(){ for i in "$@"; do tar xvf "$i"; done; }
untar(){ for i in "$*"; do tar xvf "$i"; done; }
Observe as duas funções acima.
as duas estão sendo chamadas em um script, chamaremos de "teste"
Considerando um diretório que tem arquivos com espaço nos nomes eu vi
./teste *.tar ==> funcionar para "$@"
./teste *.tar ==> não funcionar para "$*"
agora olha só minha confusão:
teste arquivo1.tar arquivo2\ teste2.tar
por que afinal quando eu uso "$@" ele sabe que o espaço correto é entre "arquivo1.tar" e arquivo2\ teste2.tar e quando eu uso "$*" este "executa" o espaço entre arquivo2 e teste2.tar como se fossem dois arquivos diferentes, quando eu uso $* ele não deveria ser capaz de entender arquivo2\ teste2.tar como se fosse uma coisa só ? ele não é o ${2} do
script ? Além do que não era para ser exatamente o contrário ?
Apenas para fechar : O fato de eu ter conseguido achar uma aplicação prática não significa que eu tenha realmente entendido o por que dessa aplicação funcionar ... muito menos que eu tenha conseguido achar o ponto chave entre $* e $@, quero dizer, o nosso exemplo acima nao funcionou comigo, seria diferença entre versões ? Só para confirmar estou usando bash 2.05b, qual é o seu ?