Unix / Linux - Meccanismi di citazione della shell

In questo capitolo, discuteremo in dettaglio sui meccanismi di citazione di Shell. Inizieremo discutendo i metacaratteri.

I metacaratteri

Unix Shell fornisce vari metacaratteri che hanno un significato speciale quando li si utilizza in qualsiasi Shell Script e causa la terminazione di una parola se non citato.

Per esempio, ? corrisponde a un singolo carattere mentre elenca i file in una directory e un *corrisponde a più di un carattere. Ecco un elenco della maggior parte dei caratteri speciali della shell (chiamati anche metacaratteri):

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

Un carattere può essere citato (cioè fatto in modo che stia per se stesso) precedendolo con a \.

Esempio

L'esempio seguente mostra come stampare un file * o a ? -

#!/bin/sh

echo Hello; Word

Dopo l'esecuzione, riceverai il seguente risultato:

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

shell returned 127

Proviamo ora a usare un carattere citato -

#!/bin/sh

echo Hello\; Word

Dopo l'esecuzione, riceverai il seguente risultato:

Hello; Word

Il $ sign è uno dei metacaratteri, quindi deve essere citato per evitare un trattamento speciale da parte della shell -

#!/bin/sh

echo "I have \$1200"

Dopo l'esecuzione, riceverai il seguente risultato:

I have $1200

La tabella seguente elenca le quattro forme di citazione:

Sr.No. Citazioni e descrizione
1

Single quote

Tutti i caratteri speciali tra queste virgolette perdono il loro significato speciale.

2

Double quote

La maggior parte dei caratteri speciali tra queste virgolette perdono il loro significato speciale con queste eccezioni:

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

Backslash

Qualsiasi carattere immediatamente successivo al backslash perde il suo significato speciale.

4

Back quote

Qualsiasi cosa tra le virgolette indietro sarebbe trattata come un comando e verrebbe eseguita.

Le citazioni singole

Considera un comando echo che contiene molti caratteri speciali della shell:

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

Mettere una barra rovesciata davanti a ogni carattere speciale è noioso e rende la riga difficile da leggere -

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

C'è un modo semplice per citare un grande gruppo di personaggi. Metti una virgoletta singola (') all'inizio e alla fine della stringa -

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

I caratteri all'interno di virgolette singole vengono citati proprio come se una barra rovesciata fosse davanti a ciascun carattere. Con questo, il comando echo viene visualizzato in modo corretto.

Se una singola virgoletta appare all'interno di una stringa da visualizzare, non dovresti inserire l'intera stringa tra virgolette singole, invece dovresti anteporla usando una barra rovesciata (\) come segue:

echo 'It\'s Shell Programming

Le doppie virgolette

Prova ad eseguire il seguente script di shell. Questo script di shell utilizza virgolette singole -

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

Dopo l'esecuzione, riceverai il seguente risultato:

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

Questo non è ciò che doveva essere mostrato. È ovvio che le virgolette singole impediscono la sostituzione delle variabili. Se si desidera sostituire i valori delle variabili e far funzionare le virgolette come previsto, è necessario inserire i comandi tra virgolette doppie come segue:

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

Dopo l'esecuzione, riceverai il seguente risultato:

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

Le virgolette doppie eliminano il significato speciale di tutti i caratteri tranne i seguenti:

  • $ per la sostituzione dei parametri

  • Virgolette per la sostituzione dei comandi

  • \$ per abilitare i segni del dollaro letterali

  • \` per abilitare le virgolette letterali

  • \" per abilitare le virgolette doppie incorporate

  • \\ per abilitare i backslash incorporati

  • Tutti gli altri \ i caratteri sono letterali (non speciali)

I caratteri all'interno di virgolette singole vengono citati proprio come se una barra rovesciata fosse davanti a ciascun carattere. Ciò aiuta la visualizzazione corretta del comando echo.

Se una singola virgoletta appare all'interno di una stringa da visualizzare, non dovresti inserire l'intera stringa tra virgolette singole, invece dovresti anteporla usando una barra rovesciata (\) come segue:

echo 'It\'s Shell Programming'

The Backquotes

Mettere in mezzo qualsiasi comando Shell backquotes esegue il comando.

Sintassi

Ecco la semplice sintassi per mettere qualsiasi Shell command tra le virgolette -

var=`command`

Esempio

Il date Il comando viene eseguito nell'esempio seguente e il risultato prodotto viene memorizzato nella variabile DATA.

DATE=`date`

echo "Current Date: $DATE"

Dopo l'esecuzione, riceverai il seguente risultato:

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