¿Cuál es la diferencia entre grep apple filey 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 appleno contiene tales caracteres.
Pero considere otro ejemplo: grep apple tree filebuscará la palabra appleen los archivos treey file, mientras grep "apple tree" fileque buscará la palabra apple treeen 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 fileproducirí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 *.txtdará 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 queUSERcontiene 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