fonction d'écriture dans une ligne dans ~ / .bashrc

29

Pourquoi lorsque j'essaie d'avoir une fonction dans une seule ligne dans le fichier .bashrc ,

list(){ ls -a }

J'ai une erreur?

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

mais quand je l'écris en plusieurs lignes, ça va?

list(){
    ls -a
}
    
posée αғsнιη 09.09.2014 - 14:47
la source

3 réponses

28

Les fonctions dans bash sont essentiellement des commandes composées (ou des blocs de code). 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.

Il n'y a aucune raison donnée, c'est juste la syntaxe.

Étant donné que la liste de la fonction à une ligne donnée ne se termine pas par une nouvelle ligne ou par une plainte ; , bash .

    
réponse donnée muru 09.09.2014 - 14:57
la source
25

Un ; est requis à la fin de la fonction:

list(){ ls -a ; }

devrait fonctionner.

La syntaxe d’une définition de fonction pour bash est spécifiée sous la forme

name () { list ; }

Notez qu’il inclut un ; qui ne fait pas partie de list .

Que le ; est requis à cet endroit est une sorte d’anomalie syntaxique. Il n'est pas spécifique à bash , il en va de même pour ksh , mais le ; n'est pas requis dans zsh .

    
réponse donnée Volker Siegel 09.09.2014 - 14:57
la source
14

La fin d’une commande unique (";") est impliquée par la nouvelle ligne. Dans la version en ligne, } est analysé en tant qu'argument de la commande ls -a non terminée. Ce que vous pouvez voir si vous faites:

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

Voyez comment la commande dans la déclaration de fonction avale l'accolade finale?

    
réponse donnée Joe Atzberger 09.09.2014 - 22:34
la source

Lire d'autres questions sur les étiquettes