J'ai vu history | grep blah
et history |grep blah
; et history|grep blah
fonctionne également, bien que personne ne semble jamais l'utiliser.
Y a-t-il une signification dans les espaces (par exemple, la tuyauterie vers / depuis différentes commandes nécessite une utilisation différente des espaces), ou est-ce toujours arbitraire?
|
le tube ou le;
point-virgule sont utilisés par la plupart des shell (bash, ksh, tcsh) comme séparateur de commandes. lorsqu'ils ne sont pas inclus entre guillemets, les espaces blancs avant et après ne sont pas pertinents.Réponses:
bash
définit plusieurs métacaractères . Deman bash
:Étant donné que les métacaractères séparent les mots, peu importe qu'ils soient entourés d'espaces. Le symbole de la pipe,,
|
est un métacaractère et donc, comme vous l'avez remarqué, il n'a pas besoin d'espaces autour de lui.Notez que
[
,]
,{
,}
et=
sont pas métacaractères. Leur signification, en revanche, dépend fortement de leur entourage par des blancs.Exemples de situations où des espaces sont et ne sont pas nécessaires
Comme vous l'avez remarqué, peu importe qu'il
|
soit entouré d'espaces. Prenons quelques exemples qui confondent souvent les utilisateurs bash. Considérer:Les parens ci-dessus forcent l'
date
exécution de la commande dans un sous-shell. Parce que(
et)
sont des métacaractères, aucun espace n'est nécessaire. Par contre:Puisque
{
et ne}
sont pas des métacaractères, le shell est traité{date}
comme un seul mot. Au lieu de rechercher ladate
commande, il recherche une commande nommée{date}
. Parce qu'il n'en trouve pas, une erreur se produit.Un autre problème courant est la
test
commande. Les éléments suivants fonctionnent avec succès:Supprimez les espaces et une erreur se produit:
Parce que
[
et ne]
sont pas des métacaractères, le shell est traité[.bashrc]
comme un seul mot et le résultat, comme dans l'date
exemple, est une erreur.Les instructions d'affectation sont également sensibles aux espaces. L'affectation suivante a réussi:
Ajoutez un espace et l'affectation échoue:
Dans ce qui précède, le shell est temporairement défini
v
sur vide, puis exécute ladate
commande.Ajouter un espace avant
=
provoque également un échec, mais pour une raison différente:Ici, le shell tente d'exécuter la commande
v
avec l'argument=date
. L'erreur est due au fait qu'il n'a trouvé aucune commande nomméev
.la source
=
. Il a fallu un certain temps pour déboguer.Les tuyaux vous permettent d'utiliser la sortie d'un programme comme entrée d'un autre ...
En ce qui concerne les espaces, sa juste question de lisibilité / préférence du personnel comme @jasonwryan l'a mentionné.
Une barre d'espace avant et après "|" est la norme ....
Vous pouvez également l'utiliser avec la colonne -t, non seulement pour rendre votre doublure propre, mais aussi pour votre sortie.
la source
Il y a un cas où il peut être utile de ne pas utiliser d'espaces. Si vous n'utilisez pas une disposition américano-américaine, vous devrez peut-être utiliser certaines combinaisons comme AltShiftLpour entrer un tuyau. Bien que ce ne soit pas un problème en soi, une conséquence est que parfois vous entrez également des caractères non imprimables avant ou après ce caractère. Par exemple, sur un clavier Macbook Pro français, je dois utiliser AltShiftLpour saisir
|
. Lorsque vous tapez rapidement, vous pouvez accidentellement taper ceci: AltShift( L, Space)Si vous n'êtes pas au courant de la AltShiftSpacesaisie d'un espace différent (l'espace insécable ( U + 00A0 )), l'erreur suivante peut être difficile à comprendre:
zsh: command not found: tail
la source
La seule signification des espaces dans ce cas est l'esthétique.
Ou en d'autres termes, utile pour rendre les commandes plus lisibles pour un humain.
la source