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

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

Re: [shell-script] Dúvidaprimária...


From: jaugusto
Subject: Re: [shell-script] Dúvidaprimária...
Date: Wed, 12 Sep 2001 13:56:41 -0300

Pessoal

    Sobre o assunto aspas, apóstofros e crase tenho a dizer o seguinte:

    Primeiramente devemos separar as funções. As aspas e os apóstofros são
caracteres inibdores de tratamento do shell enquanto a crase representa a
execução de um sub-shell.

    As aspas inibem o tratamento dado pelo shell para os caracteres que
naturalmente ele interpreta (chamados de meta caracteres). Por exemplo se
eu digitar o comando abaixo o mesmo apresentará um erro devido a
interpretação dos meta caracteres de redirecionamento "<" e ">"

echo Tecle <Enter> para continuar

    No comando acima o shell interpreta o ">" como sendo o caractere de
redirecionamento da saída padrão e o "<" como sendo o redirecionamento da
entrada padrão. Para que o shell não interprete o "<" e o ">" devemos
colocar os mesmos entre aspas, ficando assim o comando correto:

echo "Tecle <Enter> para continuar"

    O mesmo procedimento de inibição pode ser feito através da utilização
do apóstrofo.

echo 'Tecle <Enter> para continuar'

    Agora o mais importante. A diferença entre aspas e apóstrofos

Aspas
   Alguns caracteres continuam sendo interpretados pelo shell dentro das
aspas. São eles

$ , ` (crase) e \ somente quando colocada antes de $, `, \ e aspas.


Apóstrofos
   Os apóstrofos inibem a interpretação pelo shell de TODOS os caracteres
colocados entre os mesmos, incluindo aí o $, crase e a barra invertida.


    Para verificar a diferença entre os dois caracteres de inibição, aspas
e apóstrofos, teste a seguinte seqüência de comandos

var=teste
echo "$var"   ---> Irá aparecer teste, pois o tratamento do $ não foi
inibido

var=teste
echo '$var'   ---> Irá aparecer $var, pois o tratamento do $ foi inibido
pelos apóstrofos


    Continuando, a crase não é um caractere de inibição e sim um caractere
de indicação de um execução de um sub-shell.

    Quando se usa a crase está se indicando que a saída padrão do comando
interno colocado entre as crases será utilizada como argumento do comando
externo às crases.

    O shell possui uma alternativa muito melhor e mais elegante. No lugar
de crase pode-se usar a seqüência $(....), com a vantagem de se poder
colocar um sub-shell aninhado dentro do outro sub-shell

Verifiquem

var=`ls *.c` -- >> A saída do comando ls *.c será usada como argumento do
comando var=..., ou seja, o resultado do comando ls será armazenado na
variável var (Depois deseparados pelo conteúdo da variável IFS - Internal
Field Separator).

Eu prefiro

var=$(ls *c) ---> mesmo resultado, de uma maneira mais elegante e decente.

    Verifiquem este comando, onde foi usado o aninhamento de sub-shell com
$(...)

echo "Faltam $(expr 365 - $(date +%j)) dias para o fim do ano"

    Para realizar o comando acima em um único comando com crase é devéras
complicado


Um abraço a todos

José Augusto Martins Nieviadonski
HSBC Bank Brasil S.A. - Banco Múltiplo
Analista de Suporte Consultor
Treinamento de Informática

Instrutor do curso OS512-UNIX-Programação Shell (40 horas)



This message and any attachments are confidential to the ordinary user of
the e-mail address to which it was addressed and may also be privileged. If
you are not the adressee you may not copy, forward, disclose or use any
part of the message or its attachments and if you have received this
message in error, please notify the sender immediately by return e-mail and
delete it from your system.
Internet communications cannot be guaranteed to be secure or error-free as
information could be intercepted, corrupted, lost, arrive late or contain
viruses. The sender therefore does not accept liability for any errors or
omissions in the context of this message which arise as a result of
Internet transmission.



reply via email to

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