Unix / Linux - mechanizmy cytowania powłoki

W tym rozdziale omówimy szczegółowo mechanizmy cytowania Shell. Zaczniemy od omówienia metaznaków.

Metaznaki

Unix Shell zapewnia różne metaznaki, które mają specjalne znaczenie podczas używania ich w jakimkolwiek skrypcie powłoki i powoduje zakończenie słowa, chyba że są one cytowane.

Na przykład, ? pasuje do pojedynczego znaku podczas wyświetlania plików w katalogu i pliku *dopasowuje więcej niż jeden znak. Oto lista większości znaków specjalnych powłoki (zwanych także metaznakami) -

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

Znak można cytować (tzn. Ustawić, aby sam siebie) poprzedzał go znakiem \.

Przykład

Poniższy przykład pokazuje, jak wydrukować plik * lub a ? -

#!/bin/sh

echo Hello; Word

Po wykonaniu otrzymasz następujący wynik -

Hello
./test.sh: line 2: Word: command not found

shell returned 127

Spróbujmy teraz użyć cytowanego znaku -

#!/bin/sh

echo Hello\; Word

Po wykonaniu otrzymasz następujący wynik -

Hello; Word

Plik $ znak jest jednym z metaznaków, więc musi być cytowany, aby uniknąć specjalnego traktowania przez powłokę -

#!/bin/sh

echo "I have \$1200"

Po wykonaniu otrzymasz następujący wynik -

I have $1200

W poniższej tabeli wymieniono cztery formy cytowania -

Sr.No. Cytowanie i opis
1

Single quote

Wszystkie znaki specjalne w tych cudzysłowach tracą swoje specjalne znaczenie.

2

Double quote

Większość znaków specjalnych między tymi cudzysłowami traci swoje specjalne znaczenie z tymi wyjątkami -

  • $
  • `
  • \$
  • \'
  • \"
  • \\
3

Backslash

Każdy znak występujący bezpośrednio po odwrotnym ukośniku traci swoje specjalne znaczenie.

4

Back quote

Wszystko, co znajduje się pomiędzy cudzysłowami wstecznymi, będzie traktowane jako polecenie i zostanie wykonane.

Pojedyncze cytaty

Rozważmy polecenie echo, które zawiera wiele specjalnych znaków powłoki -

echo <-$1500.**>; (update?) [y|n]

Umieszczenie odwrotnego ukośnika przed każdym znakiem specjalnym jest żmudne i utrudnia odczytanie wiersza -

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

Istnieje łatwy sposób zacytowania dużej grupy znaków. Umieść pojedynczy cudzysłów (') na początku i na końcu ciągu -

echo '<-$1500.**>; (update?) [y|n]'

Znaki w pojedynczych cudzysłowach są cytowane tak, jakby przed każdym znakiem znajdował się ukośnik odwrotny. Dzięki temu polecenie echo wyświetla się we właściwy sposób.

Jeśli pojedynczy cudzysłów pojawia się w ciągu, który ma zostać wyprowadzony, nie należy umieszczać całego ciągu w pojedynczych cudzysłowach, zamiast tego należy poprzedzić go ukośnikiem odwrotnym (\) w następujący sposób -

echo 'It\'s Shell Programming

Podwójne cytaty

Spróbuj wykonać następujący skrypt powłoki. Ten skrypt powłoki używa pojedynczego cudzysłowu -

VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

Po wykonaniu otrzymasz następujący wynik -

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

Nie to musiało być wyświetlane. Jest oczywiste, że pojedyncze cudzysłowy uniemożliwiają podstawianie zmiennych. Jeśli chcesz zastąpić wartości zmiennych i sprawić, by przecinki działały zgodnie z oczekiwaniami, musisz umieścić swoje polecenia w podwójnych cudzysłowach w następujący sposób -

VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

Po wykonaniu otrzymasz następujący wynik -

ZARA owes <-$1500.**>; [ as of (07/02) ]

Podwójne cudzysłowy usuwają specjalne znaczenie wszystkich znaków z wyjątkiem następujących -

  • $ do podstawiania parametrów

  • Cudzysłowy zastępujące polecenia

  • \$ aby włączyć dosłowne znaki dolara

  • \` aby włączyć dosłowne cudzysłowy

  • \" aby włączyć osadzone podwójne cudzysłowy

  • \\ aby włączyć osadzone odwrotne ukośniki

  • Wszystkie inne \ znaki są dosłowne (nie specjalne)

Znaki w pojedynczych cudzysłowach są cytowane tak, jakby przed każdym znakiem znajdował się ukośnik odwrotny. Pomaga to poprawnie wyświetlać polecenie echo.

Jeśli pojedynczy cudzysłów pojawia się w ciągu, który ma zostać wyprowadzony, nie należy umieszczać całego ciągu w pojedynczych cudzysłowach, zamiast tego należy poprzedzić go ukośnikiem odwrotnym (\) w następujący sposób -

echo 'It\'s Shell Programming'

Backquotes

Umieszczanie dowolnego polecenia Shell pomiędzy backquotes wykonuje polecenie.

Składnia

Oto prosta składnia do umieszczenia dowolnej powłoki command pomiędzy odwrotnymi cytatami -

var=`command`

Przykład

Plik date polecenie jest wykonywane w poniższym przykładzie, a otrzymany wynik jest przechowywany w zmiennej DATA.

DATE=`date`

echo "Current Date: $DATE"

Po wykonaniu otrzymasz następujący wynik -

Current Date: Thu Jul  2 05:28:45 MST 2009