Función de escritura en una línea en ~ / .bashrc


40

¿Por qué cuando trato de escribir una función solo en una línea en el .bashrcarchivo,

list(){ ls -a }

Me sale el error?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

pero cuando lo escribo en varias líneas está bien?

list(){
    ls -a
}

Hay una pregunta equivalente posterior sobre Stack Overflow .
sampablokuper

Respuestas:


33

Las funciones en bashse denominan esencialmente comandos compuestos (o bloques de código). De man bash:

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

No se da ninguna razón, es solo la sintaxis.

Dado que la lista en la función de una línea dada no termina con una nueva línea o una ;, se bashqueja.


42

Hay una ;necesidad al final de la función:

list(){ ls -a ; }

Deberia trabajar.

La sintaxis de una definición de función para bash se especifica como

name () { list ; }

Tenga en cuenta que incluye un ;que no forma parte de list.

Que ;se requiera en este lugar es una especie de anomalía de sintaxis. No es bashespecífico, es lo mismo ksh, pero no ;es obligatorio zsh.


18

El final de un solo comando (";") está implícito en la nueva línea. En la versión en línea }se analiza como un argumento para el ls -acomando no terminado . Lo que puedes ver si lo haces:

$ foo(){ echo "a" }
}
$ foo
a }

¿Ves cómo el comando dentro de la declaración de función se traga la llave final?


2
¡Gran explicación! Por lo que es no sólo una sintaxis anomalía; en realidad hay algo de lógica en ello.
Don Hatch el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.