paulo1205
(usa Ubuntu)
Enviado em 27/12/2012 - 14:32h
lcavalheiro escreveu:
Não dar certo = fazer algo diferente daquilo que você tinha em mente.
Não funcionar = não fazer nada.
Mesmo correndo o risco de receber a pecha de "chato" por alongar o assunto, ouso dizer que nunca vi as coisas definidas desse modo.
Parando para pensar um pouco nas definições que você deu, entendo que "não fazer nada" é um caso particular de "fazer algo diferente daquilo que você tinha em mente". Em todo caso -- e aqui assumo um erro meu --, nenhuma das duas expressões, se literalmente tomadas, estão corretas, porque incompletas ("não dar certo" é um somente erro gramatical, e "não funcionar" significa ser inerte, morto, sem função). Entendidas como deveriam ter sido expressas, no entanto, não sei se "não dar [resultado] certo" e "não funcionar [corretamente]" são tão diferentes assim.
A rigor, porém, nenhum programa faz "aquilo que você tinha em mente", mas tão-somente aquilo que você manda ser feito. A coincidência entre uma coisa e outra depende da competência de quem está programando. Salvo em raros casos envolvendo defeito de hardware, um programa que faça a maior lambança destrutiva não é um programa que "não deu certo" ou que "não funcionou", mas um programa que, por ter sido mal construído ou não levar em consideração cenários diferentes do esperado, funcionou bem o bastante, produzindo o resultado que deterministicamente estava fadado a produzir, em função do código que estava nele escrito.
Exemplo: um script bobo para renomear arquivos que faz o seguinte: procura arquivos com dois patterns para nome de arquivo diferentes e se encontrar um arquivo que satisfaz essas duas condições ele renomeia o arquivo. Se você fizer isso com um for dentro do outro, você vai ter um processamento três ou quatro vezes maior do que o necessário.
Pode até ser, mas isso será consequência da pouca habilidade do programador que usou mal o recurso, não de uma falha intrínseca ou propensão a erros do comando
for ou da forma como ele é implementado pelo shell.
As chances de se errar com um for dentro de outro for e conseguir um resultado diferente do esperado são altas, ainda mais se você tem em mente o laço for-next do Basic ;-)
O
for do shell realmente não é como o do BASIC: este último é um
gerador de sequências (estritamente númericas -- pelo menos no BASIC do meu tempo), ao passo que o do shell percorre uma
sequência predefinida de valores determinísticos. O do shell, portanto, é mais simples.
(NOTA: O bash tem uma sintaxe alternativa do
for, muito parecida com a do comando de mesmo nome existente na linguagem C. É óbvio que as considerações anteriores não se aplicam a esta sintaxe, mas sim à tradicional "
for variavel in valor [...]; do comando [; ...] ; done", que era a que estava no escopo original deste tópico.)