¿Cuál es la diferencia entre comillas simples y dobles en Bash shell?

¿Cuál es la diferencia entre comillas simples y dobles en Bash shell?

Poner texto entre comillas es una práctica bastante común en la línea de comandos, especialmente cuando se trata de archivos con espacios en los nombres, pero ¿cómo saber si usar comillas simples o dobles? Echemos un vistazo a la diferencia y cuándo usar uno frente al otro.

La regla general es que las comillas dobles siempre permiten la expansión de variables entre comillas, a diferencia de las comillas simples. Sigue leyendo.

Cotizaciones con texto simple

Si solo adjunta unas pocas palabras de texto, no importa cuál use porque ambas funcionarán exactamente igual. Por ejemplo, estos dos comandos crearán un directorio llamado Test Directory:

mkdir "Test Directory"
mkdir 'Test Directory'

Los tipos más experimentados probablemente notarán que también puede usar mkdir Test Directory si lo desea.

Extensión de casco variable

La diferencia entre comillas simples y dobles se vuelve más importante cuando se trata de variables en la línea de comando; de forma predeterminada, bash expandirá una variable como $ test en la cadena completa. Primero, asignaremos la variable:

test="This is a test"

Ahora puede usar esta variable en la línea de comando, como esta, que solo debería generar Esta es una prueba en la consola:

echo $test

Aquí es donde la diferencia entre comillas simples y dobles se vuelve más clara: cuando usa comillas simples, las variables no se expandirán. Por ejemplo, si ejecuta este comando:

echo '$test'

No verá nada más que ‘$ test’ en la línea de comando cuando use comillas simples, pero se mostrará correctamente cuando use comillas dobles:

Lo mismo funciona cuando usa el carácter `para expandir un comando en la línea de comandos. Por ejemplo, suponga que desea usar el comando pwd de otro comando; usaría comillas invertidas para decirle al shell que lo extienda:

echo `pwd`/test

Si estuviera en su directorio de inicio, vería una salida con este aspecto:

/ inicio / friki / prueba

Suponga, por ejemplo, que está en una carpeta con un espacio en la ruta y desea usar el comando ln para crear un enlace simbólico a un archivo en el directorio actual. Por lo general, es necesario especificar la ruta completa cuando se usa el comando ln, por lo que es mucho más fácil usar `pwd` para evitar escribir.

Observe lo que sucede cuando intenta usar el comando sin citarlo:

ln –s `pwd`/test /home/geek/linkedname

En su lugar, deberá rodearlo entre comillas:

ln –s "`pwd`/filename" /some/other/path

Para un ejemplo más concreto, suponga que tenemos una estructura de carpetas como este ejemplo, donde todos los nombres de archivo contienen espacios:

Dado que el comando unzip no admite el uso de * para ejecutarlo en todos los archivos, deberá usar el comando for en su lugar. Aquí es donde las cosas se ponen interesantes:

for f in *.zip;do unzip $f;done

¡Ups! Parece que no funcionó.

Lo que tendremos que hacer en su lugar es usar comillas dobles alrededor de la variable $ f, como esta:

for f in *.zip;do unzip "$f";done

Ahora, cada vez que el comando for pasa por el bucle, en realidad ejecutará un comando como este:

unzip "test 1.zip"

Por supuesto, se repetirá y ejecutará un comando similar para cada archivo en el directorio.

Revisemos

Ahora que hemos revisado los ejemplos, repasaremos rápidamente en caso de que te lo hayas perdido:

Cotización doble

  • Úselo cuando desee incluir variables o use la expansión de shell dentro de una cadena.
  • Todos los caracteres del interior se interpretan como caracteres normales con la excepción de $ o `que se expandirán en el shell.

Comillas simples

  • Todos los caracteres entre comillas simples se interpretan como un carácter de cadena.

Y así termina la lección de las citas. Úselos sabiamente.

Experto Geek - Tu Guía en Tendencias Tecnológicas