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