Unix / Linux - Mecanismos de Cotação Shell
Neste capítulo, discutiremos em detalhes sobre os mecanismos de cotação do Shell. Começaremos discutindo os metacaracteres.
Os Metacaracteres
O Unix Shell fornece vários metacaracteres que têm um significado especial ao usá-los em qualquer Shell Script e causa o encerramento de uma palavra, a menos que seja citada.
Por exemplo, ? corresponde a um único caractere enquanto lista os arquivos em um diretório e um *corresponde a mais de um caractere. Aqui está uma lista da maioria dos caracteres especiais do shell (também chamados de metacaracteres) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Um caractere pode ser citado (ou seja, feito para representar a si mesmo) precedendo-o com um \.
Exemplo
O exemplo a seguir mostra como imprimir um * ou um ? -
#!/bin/sh
echo Hello; Word
Após a execução, você receberá o seguinte resultado -
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Vamos agora tentar usar um caractere citado -
#!/bin/sh
echo Hello\; Word
Após a execução, você receberá o seguinte resultado -
Hello; Word
o $ sinal é um dos metacaracteres, por isso deve ser colocado entre aspas para evitar tratamento especial pelo shell -
#!/bin/sh
echo "I have \$1200"
Após a execução, você receberá o seguinte resultado -
I have $1200
A tabela a seguir lista as quatro formas de citação -
Sr. Não. | Citação e descrição |
---|---|
1 | Single quote Todos os caracteres especiais entre essas aspas perdem seu significado especial. |
2 | Double quote A maioria dos caracteres especiais entre essas aspas perdem seu significado especial com essas exceções -
|
3 | Backslash Qualquer caractere imediatamente após a barra invertida perde seu significado especial. |
4 | Back quote Qualquer coisa entre aspas invertidas seria tratada como um comando e seria executada. |
As citações individuais
Considere um comando echo que contém muitos caracteres especiais de shell -
echo <-$1500.**>; (update?) [y|n]
Colocar uma barra invertida na frente de cada caractere especial é tedioso e torna a linha difícil de ler -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Existe uma maneira fácil de citar um grande grupo de caracteres. Coloque aspas simples (') no início e no final da string -
echo '<-$1500.**>; (update?) [y|n]'
Os caracteres entre aspas simples são citados como se uma barra invertida estivesse na frente de cada caractere. Com isso, o comando echo é exibido de maneira adequada.
Se uma aspa simples aparecer dentro de uma string a ser gerada, você não deve colocar toda a string entre aspas simples, em vez disso, você deve preceder usando uma barra invertida (\) da seguinte maneira -
echo 'It\'s Shell Programming
The Double Quotes
Tente executar o seguinte script de shell. Este script de shell usa aspas simples -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Após a execução, você receberá o seguinte resultado -
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Não era isso que precisava ser exibido. É óbvio que aspas simples evitam a substituição de variáveis. Se você quiser substituir os valores das variáveis e fazer as vírgulas invertidas funcionarem conforme o esperado, você precisará colocar seus comandos entre aspas duplas da seguinte forma -
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Após a execução, você receberá o seguinte resultado -
ZARA owes <-$1500.**>; [ as of (07/02) ]
As aspas duplas eliminam o significado especial de todos os caracteres, exceto o seguinte -
$ para substituição de parâmetro
Backquotes para substituição de comando
\$ para habilitar cifrões literais
\` para habilitar backquotes literais
\" para habilitar aspas duplas incorporadas
\\ para habilitar barras invertidas incorporadas
Todos os outros \ caracteres são literais (não especiais)
Os caracteres entre aspas simples são citados como se uma barra invertida estivesse na frente de cada caractere. Isso ajuda a exibir o comando echo corretamente.
Se uma aspa simples aparecer dentro de uma string a ser gerada, você não deve colocar toda a string entre aspas simples, em vez disso, você deve preceder usando uma barra invertida (\) da seguinte maneira -
echo 'It\'s Shell Programming'
As Backquotes
Colocar qualquer comando Shell entre backquotes executa o comando.
Sintaxe
Aqui está a sintaxe simples para colocar qualquer Shell command entre crases -
var=`command`
Exemplo
o date comando é executado no exemplo a seguir e o resultado produzido é armazenado na variável DATA.
DATE=`date`
echo "Current Date: $DATE"
Após a execução, você receberá o seguinte resultado -
Current Date: Thu Jul 2 05:28:45 MST 2009