He visto history | grep blah
y history |grep blah
; y history|grep blah
también funciona, aunque nadie parece usarlo.
¿Hay algún significado en los espacios (p. Ej., Las tuberías hacia / desde diferentes comandos requieren un uso diferente de los espacios), o es siempre arbitrario?
|
La;
mayoría de los shell (bash, ksh, tcsh) usan pipe o punto y coma como separador de comandos. cuando no se incluyen entre comillas, los espacios en blanco antes y después son irreverentes.Respuestas:
bash
define varios metacaracteres . Deman bash
:Debido a que los metacaracteres separan las palabras, no importa si están rodeadas de espacios. El símbolo de la tubería
|
, es un metacarácter y, por lo tanto, como notó, no necesita espacios a su alrededor.Tenga en cuenta que
[
,]
,{
,}
, y=
son no metacaracteres. Su significado, por el contrario, depende en gran medida de si están rodeados de espacios en blanco.Ejemplos de cuando los espacios son y no son necesarios
Como notó, no importa si
|
está rodeado de espacios. Consideremos algunos ejemplos que comúnmente confunden a los usuarios de bash. Considerar:Los parens anteriores obligan al
date
comando a ejecutarse en una subshell. Porque(
y)
son metacaracteres, no se necesitan espacios. Por el contrario:Desde
{
y}
son no metacaracteres, los dulces de concha{date}
como una palabra. En lugar de buscar eldate
comando, busca un comando llamado{date}
. Como no encuentra uno, se produce un error.Otro problema común es el
test
comando. Lo siguiente funciona con éxito:Elimine los espacios y se produce un error:
Porque
[
y no]
son metacaracteres, el shell trata como una sola palabra y el resultado, al igual que en el ejemplo, es un error.[.bashrc]
date
Las declaraciones de asignación también son sensibles a los espacios. La siguiente asignación es exitosa:
Agregue un espacio y la asignación falla:
En lo anterior, la carcasa fija temporalmente
v
a vacío y luego ejecuta eldate
comando.Agregar un espacio antes
=
también causa una falla, pero por una razón diferente:Aquí, el shell intenta ejecutar el comando
v
con el argumento=date
. El error se debe a que no encontró ningún comando llamadov
.fuente
=
. Tomó un tiempo para depurar.Las tuberías le permiten usar la salida de un programa como la entrada de otro ...
En cuanto a los espacios, es sólo cuestión de facilidad de lectura / preferencia personal como @jasonwryan mencionado.
Una barra espaciadora antes y después de "|" es la norma ...
También puede usarlo con la columna -t, no solo para que su único revestimiento esté limpio, sino también para su salida.
fuente
Hay un caso en el que puede ser útil no usar espacios. Si no está utilizando un diseño estadounidense, puede verse obligado a utilizar algunas combinaciones como AltShiftLingresar una tubería. Si bien esto no es un problema per se, una consecuencia es que a veces también ingresa caracteres que no se imprimen antes o después de ese carácter. Por ejemplo, en un teclado francés Macbook Pro, tengo que usar AltShiftLpara ingresar
|
. Cuando escribe rápidamente, puede escribir accidentalmente esto: AltShift( L, Space)Si no sabe que AltShiftSpaceingresa un espacio diferente (el espacio sin interrupción ( U + 00A0 )), el siguiente error puede ser difícil de entender:
zsh: command not found: tail
fuente
El único significado de los espacios en este caso es la estética.
O, en otras palabras, útil para hacer que los comandos sean más legibles para un humano.
fuente