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.
Las comillas inversas ya no se recomiendan
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.