Unix / Linux - Mecanismos de cotización de shell
En este capítulo, discutiremos en detalle sobre los mecanismos de cotización de Shell. Empezaremos hablando de los metacaracteres.
Los metacaracteres
Unix Shell proporciona varios metacaracteres que tienen un significado especial al usarlos en cualquier script de Shell y provocan la terminación de una palabra a menos que se cite.
Por ejemplo, ? coincide con un solo carácter mientras enumera archivos en un directorio y un *coincide con más de un carácter. Aquí hay una lista de la mayoría de los caracteres especiales de shell (también llamados metacaracteres):
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Un carácter se puede citar (es decir, hacer que se represente a sí mismo) precediéndolo con un \.
Ejemplo
El siguiente ejemplo muestra cómo imprimir un * o un ? -
#!/bin/sh
echo Hello; Word
Tras la ejecución, recibirá el siguiente resultado:
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Intentemos ahora usar un carácter entre comillas:
#!/bin/sh
echo Hello\; Word
Tras la ejecución, recibirá el siguiente resultado:
Hello; Word
los $ El signo es uno de los metacaracteres, por lo que debe citarse para evitar un manejo especial por parte del shell
#!/bin/sh
echo "I have \$1200"
Tras la ejecución, recibirá el siguiente resultado:
I have $1200
La siguiente tabla enumera las cuatro formas de cotización:
No Señor. | Cotización y descripción |
---|---|
1 | Single quote Todos los caracteres especiales entre estas comillas pierden su significado especial. |
2 | Double quote La mayoría de los caracteres especiales entre estas citas pierden su significado especial con estas excepciones:
|
3 | Backslash Cualquier carácter que siga inmediatamente a la barra invertida pierde su significado especial. |
4 | Back quote Cualquier cosa entre comillas inversas se trataría como un comando y se ejecutaría. |
Las citas individuales
Considere un comando echo que contiene muchos caracteres especiales de shell:
echo <-$1500.**>; (update?) [y|n]
Poner una barra invertida delante de cada carácter especial es tedioso y dificulta la lectura de la línea.
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Existe una forma sencilla de citar un gran grupo de personajes. Ponga una comilla simple (') al principio y al final de la cadena -
echo '<-$1500.**>; (update?) [y|n]'
Los caracteres entre comillas simples se citan como si hubiera una barra invertida delante de cada carácter. Con esto, el comando echo se muestra de manera adecuada.
Si aparece una comilla simple dentro de una cadena que se va a generar, no debe poner toda la cadena entre comillas simples, sino que debe precederla usando una barra invertida (\) de la siguiente manera:
echo 'It\'s Shell Programming
Las citas dobles
Intente ejecutar el siguiente script de shell. Este script de shell hace uso de comillas simples:
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Tras la ejecución, recibirá el siguiente resultado:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Esto no es lo que tenía que mostrarse. Es obvio que las comillas simples evitan la sustitución de variables. Si desea sustituir los valores de las variables y hacer que las comillas funcionen como se espera, entonces deberá poner sus comandos entre comillas dobles de la siguiente manera:
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Tras la ejecución, recibirá el siguiente resultado:
ZARA owes <-$1500.**>; [ as of (07/02) ]
Las comillas dobles eliminan el significado especial de todos los caracteres excepto los siguientes:
$ para sustitución de parámetros
Citas inversas para sustitución de comandos
\$ para habilitar signos de dólar literal
\` para habilitar comillas inversas literales
\" para habilitar comillas dobles incrustadas
\\ para habilitar barras invertidas incrustadas
Todos los demás \ los caracteres son literales (no especiales)
Los caracteres entre comillas simples se citan como si hubiera una barra invertida delante de cada carácter. Esto ayuda a que el comando echo se muestre correctamente.
Si aparece una comilla simple dentro de una cadena que se va a generar, no debe poner toda la cadena entre comillas simples, sino que debe precederla usando una barra invertida (\) de la siguiente manera:
echo 'It\'s Shell Programming'
Las comillas traseras
Poner cualquier comando de Shell en el medio backquotes ejecuta el comando.
Sintaxis
Aquí está la sintaxis simple para poner cualquier Shell command entre comillas inversas -
var=`command`
Ejemplo
los date El comando se ejecuta en el siguiente ejemplo y el resultado producido se almacena en la variable DATA.
DATE=`date`
echo "Current Date: $DATE"
Tras la ejecución, recibirá el siguiente resultado:
Current Date: Thu Jul 2 05:28:45 MST 2009