¿Cuál es la diferencia entre grep apple file
y grep "apple" file
? ¿Qué hace poner las comillas? Ambos parecen funcionar y hacen exactamente lo mismo (mostrar la misma línea).
22
Las comillas tienen un efecto sobre los caracteres que su shell considera especiales y tienen un significado sintáctico. En su ejemplo, esto no hace la diferencia porque apple
no contiene tales caracteres.
Pero considere otro ejemplo: grep apple tree file
buscará la palabra apple
en los archivos tree
y file
, mientras grep "apple tree" file
que buscará la palabra apple tree
en el archivo file
. Las comillas le dicen a bash, que la palabra espacio "apple tree"
no inicia un nuevo parámetro sino que será parte del parámetro actual. grep apple\ tree file
produciría el mismo resultado, porque \
le dice a bash que ignore el significado especial del siguiente carácter y lo trate literalmente.
grep a*b equations.txt
, buscaráa*b
, a menos que haya un archivo en el directorio actual que comience con a y termine en b, en cuyo caso (porque (ba) sh expandirá los nombres de archivo en la línea de comando) se llamará a grep con completar diferentes parámetros, lo que resulta en diferentes resultados. Esto suele ser más un problema con find, ya que un comando comofind . -name *.txt
dará lugar a un comportamiento inesperado, si hay un archivo txt en el directorio actual. Es mejor usar comillas en este caso."
) y comillas simples ('
). Las comillas simples impiden la interpretación de ciertos caracteres como$
, mientras que las comillas dobles permiten la interpretación. Por ejemplogrep '${USER}'
, buscará el texto${USER}
, mientrasgrep "${USER}"
que buscará el texto queUSER
contiene la variable (por ejemplojohnstacen
).Las comillas dobles permiten la evaluación, las comillas simples impiden la evaluación, ninguna comilla permite la expansión de comodines, cuando se usa en la línea de comandos. Como ejemplos artificiales:
Comprender la forma en que funcionan las citas es fundamental para comprender Bash. Por ejemplo:
Puede usar comillas simples para pasar un comando a través de una variable. Las comillas simples evitarán la evaluación. Se evaluarán las comillas dobles.
Puede usar comillas simples dentro de comillas dobles y puede usar comillas dobles dentro de comillas dobles, pero las comillas dobles dentro de comillas simples
no se deben hacer (sin escapar de ellas)no se evaluarán, se interpretarán literalmente. Las comillas simples dentro de comillas simples no deben hacerse (sin escapar de ellas).Tendrá que obtener una comprensión profunda de las citas para usar Bash de manera efectiva. ¡Muy importante!
Como regla general, no uso comillas si quiero que Bash expanda algo en elementos (como una matriz), uso comillas simples para cadenas literales que no se deben alterar, y hago un uso liberal de comillas dobles para variables que probablemente devuelvan cualquier tipo de cadena. Esto es para garantizar que se conservarán los espacios y los caracteres especiales.
fuente