GNU/Linux >> Znalost Linux >  >> Linux

bash:jak předat argumenty příkazového řádku obsahující speciální znaky

Můžete buď:

  1. Každému jednotlivému speciálnímu symbolu dejte zpětné lomítko (jako \[abc\]_\[x\|y\] ) nebo
  2. Celý argument uveďte do dvojitých uvozovek (jako v "[abc]_[x|y]" ).

UPRAVIT: Jak někteří zdůraznili, dvojité uvozovky nebrání expanzi proměnné ani substituci příkazů. Pokud tedy váš regulární výraz obsahuje něco, co může bash interpretovat jako jedno z toho, použijte místo toho jednoduché uvozovky.


Používejte jednoduché uvozovky. Jednoduché uvozovky zajišťují, že žádný ze znaků nebude interpretován.

$ 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
'

Pokud potřebujete vložit jednu nabídku, existují dvě řešení:

$ 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! ]

Za man bash

Existují tři mechanismy citování:únikový znak , jednoduché a dvojité uvozovky.

Zpětné lomítko bez uvozovek (\ ) jeúnikový znak . Zachová doslovnou hodnotu dalšího znaku, který následuje, s výjimkou . Pokud \ Objeví se pár a zpětné lomítko není samo o sobě uvozováno, \ je považováno za pokračování řádku (to znamená, že je odstraněno ze vstupního proudu a efektivně ignorováno).

Uzavření znaků do jednoduchých uvozovek zachová doslovnou hodnotu každého znaku v uvozovkách. Jednoduchá uvozovka se nesmí vyskytovat mezi jednotlivými uvozovkami, i když jim předchází zpětné lomítko.

Uzavření znaků do dvojitých uvozovek zachová doslovnou hodnotu všech znaků v uvozovkách, s výjimkou $ , ` , \ , a pokud je povoleno rozšíření historie, ! . Znaky $ a ` zachovat jejich zvláštní význam v uvozovkách. Zpětné lomítko si zachová svůj zvláštní význam pouze tehdy, když za ním následuje jeden z následujících znaků:$ , ` , " ,\ , nebo . Dvojitá uvozovka může být uvedena v uvozovkách tak, že před ní bude zpětné lomítko. Je-li povoleno, rozbalení historie se provede, pokud ! objevující se dvojité uvozovky se escapují pomocí zpětného lomítka. Zpětné lomítko před ! není odstraněn.

Speciální parametry * a @ mají zvláštní význam v uvozovkách (viz PARAMETERS níže).

Slova ve tvaru $' řetězec ' se ošetřují speciálně. Slovo expanduje na řetězec , přičemž znaky bez zpětného lomítka jsou nahrazeny podle specifikace standardu ANSI C. Zpětné lomítko escape sekvence, pokud existují, jsou dekódovány následovně:

       \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

Rozšířený výsledek je v jednoduchých uvozovkách, jako by znak dolaru nebyl přítomen.

Řetězec v uvozovkách, kterému předchází znak adolar ($" řetězec " ) způsobí překlad řetězce podle aktuálního národního prostředí. Pokud je aktuální národní prostředí C nebo POSIX , znak dolaru je ignorován. Pokud je řetězec přeložen a nahrazen, je nahrazení dvojitými uvozovkami.


Linux
  1. Jak vymazat historii příkazového řádku BASH v Linuxu

  2. Nagios:Jak povolit argumenty příkazového řádku check_nrpe

  3. Jak načíst verzi Java pomocí jednořádkového příkazu v Linuxu

  1. Zachovat uvozovky v argumentech bash

  2. argumenty příkazového řádku pro spuštění dockeru

  3. Jak předat výstup příkazu jako více argumentů jinému příkazu

  1. Jak předat argumenty skriptu vyvolanému příkazem source?

  2. Jak rozdělit řetězec s uvozovkami (jako argumenty příkazu) v bash?

  3. Bash, pokud na jednom řádku