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: Alain
Subject: Re: [shell-script] O que é "Shell Script"?
Date: Thu, 10 Feb 2005 21:31:35 -0200
User-agent: Mozilla Thunderbird 1.0 (X11/20041206)

Muuito obrigado.

Agora aspas simples é para executar primeiro, correto? E parece que agora o correto é usar $( ... ) ou estou enganado?

grato,
Alain

Eliphas Levy Theodoro escreveu:
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"].



reply via email to

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