GNU/Linux >> Tutoriales Linux >  >> Linux

Escapar de un carácter de estrella (*) en bash

  1. Siempre ponga comillas dobles alrededor de sustituciones de variables, de lo contrario, caracteres como espacios y * que aparecen en el valor son interpretados por el shell. Es decir, escribe "$c" , no $c .

  2. La sintaxis mysql <"$c" hace mysql ejecutar comandos desde un archivo cuyo nombre es el valor de $c . Lo que estás buscando es

    printf '%s\n' "$c" | mysql
    

    o más simple, siempre y cuando recuerdes las restricciones ($c no debe comenzar con un - , y si contiene \ eso está bien en bash pero no en otras variantes de sh)

    echo "$c" | mysql
    

    Hay otra alternativa que es más cómoda si el comando es multilínea. Se llama un "documento aquí". La cadena EOF no es especial (aunque es tradicional), cualquier secuencia de letras y dígitos servirá. El EOF terminal puede no estar precedido por un espacio en blanco. Tienes que poner un \ antes de cada $ , \ y ` a menos que desee que el shell los interprete.

    mysql <<EOF
    GRANT ALL ON *.* TO '$1'@'localhost';
    EOF
    
  3. Tenga en cuenta que si el argumento del shell contiene una comilla simple, tiene un vector de inyección. El siguiente fragmento agrega un \ antes de cada \ y ' .

    set -- "${1//\\/\\\\}"
    set -- "${1//\'/\'}"
    

    Esto es bastante feo, por lo que si va a hacer algo complicado, olvídese de usar un shell y use un lenguaje con enlaces SQL reales (perl, python, lo que sea) donde la biblioteca maneja todas las cotizaciones y la creación de procedimientos por usted. .


Use comillas simples para su cadena:

c='GRANT ALL ON *.* TO';
c="${c} '$1'@'localhost';";

Probablemente haya una mejor manera de hacerlo, pero incluir $1 en la cadena lo hizo raro


Esto funcionará en bash, no es necesario escapar

#!/bin/bash
mysql -u root -e "GRANT ALL ON *.* TO '$1'@'localhost'"
exit 0;

Linux
  1. Bash secuencias de comandos (I)

  2. ¿Es posible obtener un carácter en el cursor de la terminal usando códigos de escape Ansi?

  3. Ejecute el comando bash en la canalización de jenkins

  4. echo el carácter de nueva línea no funciona en bash

  5. Reasignar Ctrl-A en la pantalla GNU

Declaración de Bash if..else

Arreglos bash

Bash Shebang

Comando Bash printf

Matriz asociativa en Bash

¿Carácter extraño en el aviso de Bash?