Quelle est la difference entre grep apple file
et grep "apple" file
? Que fait la mise entre guillemets? Ils semblent tous les deux fonctionner et font exactement la même chose (afficher la même ligne).
22
Les guillemets ont un effet sur les caractères que votre shell considère spéciaux et ont une signification syntaxique. Dans votre exemple, cela ne fait aucune différence car apple
ne contient pas de tels caractères.
Mais considérons un autre exemple: grep apple tree file
recherchera le mot apple
dans les fichiers tree
et file
, tandis que grep "apple tree" file
recherchera le mot apple tree
dans le fichier file
. Les guillemets indiquent à bash que l'espace des mots dans "apple tree"
ne démarre pas un nouveau paramètre mais doit faire partie du paramètre actuel. grep apple\ tree file
produirait le même résultat, car \
dit à bash de ne pas tenir compte de la signification spéciale du caractère suivant et de le traiter littéralement.
grep a*b equations.txt
il rechercheraa*b
, sauf s'il y a un fichier dans le répertoire courant commençant par a, et se terminant par b, auquel cas (parce que (ba) sh étendra les noms de fichiers sur la ligne de commande) grep sera appelé avec compléter différents paramètres, ce qui donne des résultats différents. C'est généralement plus un problème avec find, car une commande commefind . -name *.txt
entraînera un comportement inattendu, s'il y a un fichier txt dans le répertoire courant. Il est préférable d'utiliser des guillemets dans ce cas."
) et les guillemets simples ('
). Les guillemets simples empêchent l'interprétation de certains caractères tels que$
, tandis que les guillemets doubles permettent l'interprétation. Par exemple,grep '${USER}'
va chercher le texte${USER}
, tandis quegrep "${USER}"
va chercher le texte que la variableUSER
contient (par exemplejohnstacen
).Les guillemets doubles permettent l'évaluation, les guillemets simples empêchent l'évaluation, aucun guillemet ne permet l'expansion des caractères génériques lorsqu'ils sont utilisés en ligne de commande. Comme exemples artificiels:
Comprendre le fonctionnement des citations est essentiel pour comprendre Bash. Par exemple:
Vous pouvez utiliser des guillemets simples pour passer une commande via une variable. Les guillemets simples empêcheront l'évaluation. Les guillemets doubles seront évalués.
Vous pouvez utiliser des guillemets simples à l'intérieur des guillemets doubles et vous pouvez utiliser des guillemets doubles à l'intérieur des guillemets doubles, mais les guillemets doubles à l'intérieur des guillemets simples
ne doivent pas être effectués (sans les échapper)ne seront pas évalués, ils seront interprétés littéralement. Les guillemets simples entre guillemets simples ne doivent pas être effectués (sans les échapper).Vous devrez acquérir une compréhension approfondie des devis pour utiliser efficacement Bash. Très important!
En règle générale, je n'utilise pas de guillemets si je veux que Bash développe quelque chose en éléments (comme un tableau), j'utilise des guillemets simples pour les chaînes littérales qui ne doivent pas être modifiées, et j'utilise généreusement des guillemets doubles pour les variables susceptibles de renvoyer tout type de chaîne. Il s'agit de garantir que les espaces et les caractères spéciaux seront préservés.
la source