将函数在一行中写入 ~/.bashrc 中

将函数在一行中写入 ~/.bashrc 中

.bashrc为什么当我尝试在文件中仅用一行代码编写一个函数时,

list(){ ls -a }

我收到错误?

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

但是当我用多行写它时可以吗?

list(){
    ls -a
}

答案1

;函数末尾有一个需要:

list(){ ls -a ; }

应该管用。

Bash 函数定义的语法如下

name () { list ; }

请注意,它包括;不属于的list

此处需要,这;有点语法异常。它并不bash具体,对于 来说也是一样ksh,但;中不需要zsh

答案2

中的函数bash本质上是命名的复合命令(或代码块)。从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.

没有给出任何理由,这只是语法。

由于给出的单行函数中的列表没有以换行符或 结束;,因此bash会发出抱怨。

答案3

单个命令的结束(“;”)由换行符表示。在单行版本中,}它被解析为未终止命令的参数ls -a。如果您执行以下操作,则可以看到:

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

看看函数声明中的命令是如何吞掉尾随的花括号的?

相关内容