GNU/Linux >> Linux Esercitazione >  >> Linux

bash:come passare argomenti della riga di comando contenenti caratteri speciali

Puoi:

  1. Sfuggi a ogni singolo simbolo speciale con una barra rovesciata (come in \[abc\]_\[x\|y\] ) o
  2. Riporta tra virgolette l'intero argomento (come in "[abc]_[x|y]" ).

MODIFICA: Come alcuni hanno sottolineato, le doppie virgolette non impediscono l'espansione delle variabili né la sostituzione dei comandi. Pertanto, se la tua regex contiene qualcosa che può essere interpretato da bash come uno di quelli, usa invece le virgolette singole.


Usa le virgolette singole. Le virgolette singole assicurano che nessuno dei caratteri venga interpretato.

$ printf %s 'spaces  are  not  interpreted away
neither are new lines
nor variable names $TESTING
nor square brackets [TESTING]
nor pipe characters or redirection symbols | > <
nor the semicolon ;
nor backslashes \a \b \c \\
the only thing that does not work is the single quote itself
'

Ci sono due soluzioni se hai bisogno di incorporare una singola citazione:

$ printf '%s\n' '[ Don'"'"'t worry, be happy! ]'
[ Don't worry, be happy! ]
$ printf '%s\n' '[ Don'\''t worry, be happy! ]'
[ Don't worry, be happy! ]

Ogni man bash

Esistono tre meccanismi di citazione:il carattere di escape , virgolette singole e virgolette doppie.

Una barra rovesciata non quotata (\ ) è il carattere di escape . Conserva il valore letterale del carattere successivo che segue, ad eccezione di . Se un \ Appare la coppia e la barra rovesciata non è essa stessa tra virgolette, il \ viene trattato come una continuazione di riga (ovvero, viene rimosso dall'inputstream ed effettivamente ignorato).

Racchiudere i caratteri tra virgolette singole conserva il valore letterale di ciascun carattere all'interno delle virgolette. Un apice singolo potrebbe non trovarsi tra apici singoli, anche se preceduto da una barra rovesciata.

Racchiudere i caratteri tra virgolette preserva il valore letterale di tutti i caratteri tra virgolette, ad eccezione di $ , ` , \ e, quando l'espansione della cronologia è abilitata, ! . I caratteri $ e ` mantengono il loro significato speciale tra virgolette doppie. La barra rovesciata conserva il suo significato speciale solo se seguita da uno dei seguenti caratteri:$ , ` , " ,\ o . Una doppia virgoletta può essere citata tra virgolette facendola precedere da una barra rovesciata. Se abilitata, verrà eseguita l'espansione della cronologia a meno che non venga visualizzato un ! che appare tra virgolette doppie viene sfuggito usando una barra rovesciata. La barra rovesciata che precede ! non viene rimosso.

I parametri speciali * e @ hanno un significato speciale tra virgolette (vedi PARAMETRI sotto).

Parole della forma $' stringa ' sono trattati in modo speciale. La parola si espande in stringa , con caratteri di escape barra rovesciata sostituiti come specificato dallo standard ANSI C. Le sequenze di escape della barra rovesciata, se presenti, vengono decodificate come segue:

       \a     alert (bell)
       \b     backspace
       \e
       \E     an escape character
       \f     form feed
       \n     new line
       \r     carriage return
       \t     horizontal tab
       \v     vertical tab
       \\     backslash
       \'     single quote
       \"     double quote
       \nnn   the eight-bit character whose value is the octal value nnn
              (one to three digits)
       \xHH   the eight-bit character whose value is the hexadecimal value HH
              (one or two hex digits)
       \uHHHH the Unicode (ISO/IEC 10646) character whose value is
              the hexadecimal value HHHH (one to four hex digits)
       \UHHHHHHHH
              the Unicode (ISO/IEC 10646) character whose value is
              the hexadecimal value HHHHHHHH (one to eight hex digits)
       \cx    a control-x character

Il risultato espanso è quotato singolo, come se il simbolo del dollaro non fosse stato presente.

Una stringa tra doppi apici preceduta dal simbolo del dollaro ($" stringa " ) causerà la traduzione della stringa in base alla locale corrente. Se la lingua corrente è C o POSIX , il simbolo del dollaro viene ignorato. Se la stringa viene tradotta e sostituita, la sostituzione è tra virgolette doppie.


Linux
  1. Passare gli argomenti della riga di comando allo script Bash?

  2. Come vengono analizzati gli argomenti della riga di comando remota Ssh?

  3. Nagios:come abilitare gli argomenti della riga di comando check_nrpe

  4. Come recuperare la versione Java usando il comando a riga singola in Linux

  5. Conserva le virgolette negli argomenti di bash

Come commentare in Bash

Come visualizzare la cronologia di Bash senza numeri di riga

Come eseguire il backup di un singolo database MySQL dalla riga di comando

Come leggere gli argomenti della riga di comando negli script della shell?

Come posso modificare le righe precedenti in un comando a più righe in Bash?

Come dividere una stringa con virgolette (come argomenti di comando) in bash?