GNU/Linux >> Tutoriales Linux >  >> Linux

bash:cómo pasar argumentos de línea de comando que contienen caracteres especiales

Puedes:

  1. Escape de cada símbolo especial individual con una barra invertida (como en \[abc\]_\[x\|y\] ) o
  2. Entre comillas dobles para todo el argumento (como en "[abc]_[x|y]" ).

EDITAR: Como algunos han señalado, las comillas dobles no impiden la expansión de variables ni la sustitución de comandos. Por lo tanto, si su expresión regular contiene algo que bash puede interpretar como uno de esos, use comillas simples en su lugar.


Utilice comillas simples. Las comillas simples aseguran que ninguno de los caracteres sea interpretado.

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

Hay dos soluciones si necesita incrustar una comilla simple:

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

Por man bash

Hay tres mecanismos de cotización:el carácter de escape , comillas simples y comillas dobles.

Una barra invertida sin comillas (\ ) es el carácter de escape . Conserva el valor literal del siguiente carácter que sigue, con la excepción de . Si un \ Aparece el par , y la barra invertida no está citada, el \ se trata como una continuación de línea (es decir, se elimina del flujo de entrada y se ignora).

Si se incluyen caracteres entre comillas simples, se conserva el valor literal de cada carácter entre comillas. Una comilla simple no puede aparecer entre comillas simples, incluso cuando va precedida de una barra invertida.

Encerrar caracteres entre comillas dobles conserva el valor literal de todos los caracteres dentro de las comillas, con la excepción de $ , ` , \ y, cuando la expansión del historial está habilitada, ! . Los personajes $ y ` conservan su significado especial entre comillas dobles. La barra invertida conserva su significado especial solo cuando va seguida de uno de los siguientes caracteres:$ , ` , " ,\ , o . Una comilla doble puede citarse entre comillas dobles precediéndola de una barra invertida. Si está habilitado, la expansión del historial se realizará a menos que ! la aparición de comillas dobles se escapa mediante una barra invertida. La barra invertida que precede a ! no se elimina.

Los parámetros especiales * y @ tienen un significado especial cuando están entre comillas dobles (consulte PARAMETERS abajo).

Palabras de la forma $' cadena ' son tratados especialmente. La palabra se expande a cadena , con caracteres de escape de barra invertida reemplazados según lo especificado por el estándar ANSI C. Las secuencias de escape de barra invertida, si están presentes, se decodifican de la siguiente manera:

       \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

El resultado expandido está entre comillas simples, como si el signo de dólar no hubiera estado presente.

Una cadena entre comillas dobles precedida por el signo de dólar ($" cadena " ) hará que la cadena se traduzca según la configuración regional actual. Si la ubicación actual es C o POSIX , se ignora el signo de dólar. Si la cadena se traduce y se reemplaza, el reemplazo se escribe con comillas dobles.


Linux
  1. ¿Cómo pasar un argumento de línea de comando a un script de Shell?

  2. ¿Pasar argumentos de línea de comando a Bash Script?

  3. ¿Cómo se analizan los argumentos de la línea de comandos remotos de Ssh?

  4. comando bash alias con comillas simples y dobles

  5. Argumentos de la línea de comando para ejecutar la ventana acoplable

Cómo comentar en Bash

Cómo mostrar el historial de Bash sin números de línea

Cómo hacer una copia de seguridad de una sola base de datos MySQL desde la línea de comandos

¿Cómo leer argumentos de línea de comando en scripts de Shell?

¿Cómo pasar argumentos a un script invocado por el comando fuente?

¿Cómo edito líneas anteriores en un comando de varias líneas en Bash?