shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] O que é "Shell Script"?


From: Eliphas Levy Theodoro
Subject: Re: [shell-script] O que é "Shell Script"?
Date: Thu, 10 Feb 2005 15:10:39 -0200 (BRST)

Alain, @ 09/02/05 - 20:05:

> Eliphas Levy Theodoro escreveu:
>>
>> $ A=500.175
>> $ awk "BEGIN { print ($A > 500) ? \"true\" : \"false\" }"
>> true
>>
>> Alguém esqueceu o BEGIN ;)
>>
>> Isso é simplesmente um problema de sintaxe. O awk não aceita aspas
>> simples como delimitador de strings, e o shell só faz substituição de
>> variáveis na linha de comando se não estiverem dentro de aspas
>> simples.
>
> Sempre vi comandos de awk com aspas simples, você poderia explicar
> quando e porque aspas simples ou duplas (ou até inversas)?

O awk é chato com o delimitador de suas strings. Tem que ser sempre em 
aspas duplas:

$ awk 'BEGIN { if ("a" == "a") { print "aa"; } }'
aa
$ awk "BEGIN { if ('a' == 'a') { print 'aa'; } }"
awk: cmd. line:1:   ^ invalid char ''' in expression

Então a maioria das vezes você vai ver comandos de uma linha em awk 
entre aspas simples, pois aí não é necessário escapar as aspas duplas 
dentro do script, como:

$ awk "BEGIN { if (\"a\" == \"a\") { print \"aa\"; } }"
aa


Porém, o shell só troca variáveis de ambiente se elas *NÃO* estiverem 
dentro de aspas simples:

$ echo "$HOME" '$HOME'
/home/eliphas $HOME

Por isso a necessidade de usar aspas duplas no script awk. Claro que não 
é suuuuuper necessário, o awk (assim como o perl) tem meios de pegar as 
variáveis de ambiente sem o auxílio do shell:

$ awk 'BEGIN { print ENVIRON["HOME"] }'
/home/eliphas

Eu normalmente começo a escrever em aspas simples. Se depois descubro 
que vou precisar de uma ou outra variável, vejo qual é mais fácil: 
Trocar as aspas simples por duplas ou usar o ENVIRON["VAR"].

-- 
Eliphas

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]