GNU/Linux >> Tutoriales Linux >  >> Linux

Diferencia entre comillas simples y dobles en Bash Shell

A menudo usará comillas en la línea de comandos de Linux. ¿Tratando con espacios en el nombre de archivo? Usas comillas. ¿Manejo de caracteres especiales? Usas comillas de nuevo.

Las comillas son una 'característica especial' en el shell de Linux y pueden resultar confusos, especialmente si es nuevo en los comandos de Linux y las secuencias de comandos de shell.

Explicaré los diferentes tipos de caracteres de comillas y su uso en scripts de shell.

Hay cuatro tipos diferentes de caracteres de comillas:

  • Comilla simple '
  • Comilla doble "
  • barra invertida \
  • Cita posterior `

Excepto la reacción violenta, el resto de los tres personajes ocurren en pareja.

Echemos un vistazo a ellos en detalle.

1. Comilla simple

La comilla simple en Shell ignora todo tipo de caracteres especiales en ella. Todo lo que está entre comillas simples se considera un solo elemento.

Tomemoslo con el ejemplo. Aquí hay un archivo de texto de muestra con algunos jugadores de críquet de los años 90.

[email protected]:~$ cat cricket 
Allan Donald, South Africa
Steve Waugh, Australia
Mark Waugh, Australia
Henry Olonga, Zimbabwe
Sachin Tendulkar, India

Ahora, usa el comando grep para buscar jugadores de cricket con el apellido Waugh. Esto le dará dos resultados:

[email protected]:~$ grep Waugh cricket
Steve Waugh, Australia
Mark Waugh, Australia

Pero si desea buscar solo a Steve Waugh e intenta usarlo tal como está, verá un error:

[email protected]:~$ grep Steve Waugh cricket
grep: Waugh: No such file or directory
cricket:Steve Waugh, Australia

¿Por qué? Porque el espacio se usa para separar el comando, las opciones y el argumento. En el ejemplo anterior, se necesita Steve como el primer argumento de grep pero Waugh y cricket se toman como los archivos en los que se debe realizar la búsqueda. Dado que no hay ningún archivo llamado Waugh , arroja un error por eso. Al mismo tiempo, también muestra el resultado del archivo cricket .

Aquí es donde la cita viene al rescate. Cuando encierra los argumentos entre comillas, se interpreta como una sola entidad.

[email protected]:~$ grep 'Steve Waugh' cricket
Steve Waugh, Australia

Básicamente, cuando el shell ve la primera comilla simple, ignora cualquier carácter especial (el espacio en blanco también es un carácter especial) hasta que encuentra otra comilla simple (comillas de cierre).

Ignorar todos los caracteres especiales

Todos los caracteres especiales pierden su significado si se encierran entre comillas simples. Veámoslo con ejemplos.

Declaremos una variable en shell. Si repite el nombre de la variable con $, muestra el valor de la variable.

[email protected]:~$ var=my_variable
[email protected]:~$ echo $var
my_variable

Pero si lo envuelve entre comillas simples, $ perderá su poder especial.

[email protected]:~$ echo '$var'
$var

Ahora solo eso. La tecla Intro también se conserva entre comillas simples.

[email protected]:~$ echo 'how are
> you?'
how are
you?

2. Comillas dobles

Las comillas dobles funcionan casi de manera similar a las comillas simples. Casi porque también tienden a ignorar todos los caracteres especiales excepto:

  • Signos de dólar $
  • Comillas inversas `
  • Barras invertidas \

Dado que el signo de dólar no se ignora, puede esperar que el nombre de la variable se sustituya por su valor. Lo cual no es el caso con las comillas simples.

[email protected]:~$ var=my_variable
[email protected]:~$ echo "$var"
my_variable
[email protected]:~$ echo '$var'
$var

Las comillas dobles se pueden usar para ocultar las comillas simples del shell.

[email protected]:~$ var=My 'own villa' is yellow
own villa: command not found
[email protected]:~$ var="My 'own villa' is yellow"
[email protected]:~$ echo $var
My 'own villa' is yellow

Del mismo modo, puede utilizar las comillas simples para ocultar las comillas dobles del shell.

[email protected]:~$ var=he said, "Awesome!"
said,: command not found
[email protected]:~$ var='he said, "Awesome!"'
[email protected]:~$ echo $var
he said, "Awesome!"

3. barra invertida

La barra invertida es como poner comillas simples alrededor de un solo carácter. La barra invertida 'escapa' del carácter al que se coloca antes.

Esto significa que el carácter seguido de la barra invertida perderá su significado especial (si lo tiene).

[email protected]:~$ var=variable
[email protected]:~$ echo \var
var
[email protected]:~$ echo $var
variable
[email protected]:~$ echo \$var
$var

Porque v no tiene un significado especial, echo \var simplemente imprime var. Por otro lado, cuando se usa con $var , la barra diagonal inversa escapa al significado especial de $ y por lo tanto se imprime como $var en lugar del valor de var .

Continuar la línea con barra invertida

Notará otro uso práctico del carácter de barra invertida al continuar un solo comando en varias líneas.

Cuando un comando es demasiado largo o si es una combinación de comandos, verá algunos sitios web que usan una barra invertida para mostrar el comando único en más de una línea. Esto hace que el comando/código sea más legible.

Tome este comando largo, por ejemplo.

docker run --name server --network net -v html:/usr/share/nginx/html -v $PWD/custom-config.conf:/etc/nginx/nginx.conf -p 80:80 --restart on-failure -d nginx:latest

El mismo comando se puede dividir en varias líneas gracias a las barras invertidas.

docker run --name server --network net \
-v html:/usr/share/nginx/html \
-v $PWD/custom-config.conf:/etc/nginx/nginx.conf \
-p 80:80 --restart on-failure -d nginx:latest

Es el mismo comando, solo que un poco más fácil de entender.

barra invertida dentro de comillas dobles

La barra diagonal inversa es uno de los tres caracteres especiales que mantiene su significado especial junto con el signo de dólar y las comillas inversas.

De esta manera, puede usar la barra invertida para escapar del significado especial del signo de dólar, las comillas dobles y las comillas inversas entre comillas dobles.

Tome el siguiente ejemplo donde $5 se considera una variable que no está declarada y por lo tanto no tiene valor. Es por eso que se ignora desde la salida del comando echo.

[email protected]:~$ echo "Meal costs $5.25"
Meal costs .25

Para usar este $ sin que se interprete como el valor de una variable, debe escapar con /.

[email protected]:~$ echo "Meal costs \$5.25"
Meal costs $5.25

Aquí, la barra invertida (\) se interpreta por su superpoder, que es escapar del significado especial del carácter posterior.

4. Comillas traseras

La última de esta lista son las comillas inversas y tiene un significado especial. Se utiliza para la sustitución de comandos.

El shell tiene esta función de sustitución de comandos en la que un comando específico se reemplaza con la salida del comando.

En el siguiente ejemplo, `fecha` se reemplaza por la salida del comando de fecha que muestra la fecha y hora actual del sistema Linux.

[email protected]:~$ echo The current date and time is `date`
The current date and time is Monday 23 August 2021 04:55:18 PM IST

Una cosa a tener en cuenta es que la sustitución solo tendrá lugar si hay un comando entre las comillas posteriores. De lo contrario, se muestra tal cual.

[email protected]:~$ echo 'The current date and time is `late`'
The current date and time is `late`

Nuevamente, las comillas dobles interpretan las comillas inversas, pero las comillas simples ignoran su significado especial.

Durante años, las comillas inversas se utilizaron para la sustitución de comandos en las secuencias de comandos de Shell. Pero en estos días, los sistemas UNIX y Linux modernos prefieren el $(command) construye en su lugar.

[email protected]:~$ echo The current date and time is $(date)
The current date and time is Monday 23 August 2021 05:55:47 PM IST

Quédese con el tiempo y deje de usar las comillas inversas ahora.

Espero que comprenda mejor las comillas en Linux y los scripts de shell ahora.

Deje sus sugerencias y preguntas en la sección de comentarios.


Linux
  1. ¿Diferencia entre 'y' en la línea de comando (bash)?

  2. ¿Diferencia entre las variables de Shell que se exportan y las que no están en Bash?

  3. Linux:¿cuál es la diferencia entre `su -` y `su –login`?

  4. ¿Cuál es la diferencia entre ejecutar un script Bash y obtenerlo?

  5. ¿Diferencia entre '{}' y {} en el comando de búsqueda?

Diferencia entre la definición de variables Bash con y sin exportación

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿La diferencia entre un comando incorporado y uno que no lo es?

¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

¿La diferencia en el uso entre las variables de shell y las variables de entorno?

¿Cuál es la diferencia entre una consola, una terminal y un shell?