![将函数在一行中写入 ~/.bashrc 中](https://linux22.com/image/861653/%E5%B0%86%E5%87%BD%E6%95%B0%E5%9C%A8%E4%B8%80%E8%A1%8C%E4%B8%AD%E5%86%99%E5%85%A5%20~%2F.bashrc%20%E4%B8%AD.png)
.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 }
看看函数声明中的命令是如何吞掉尾随的花括号的?