问题描述
为什么当我尝试在.bashrc
文件中仅一行查找函数时,
list(){ ls -a }
我出错了吗?
bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file
但是当我多行编写时可以吗?
list(){
ls -a
}
最佳解决办法
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.
没有给出任何原因,只是语法。
由于给定的one-line函数中的列表未以换行符或;
终止,因此bash
会抱怨。
次佳解决办法
函数末尾需要一个;
:
list(){ ls -a ; }
应该管用。
bash函数定义的语法指定为
name () { list ; }
请注意,它包含一个;
,它不是list
的一部分。
在这个地方需要;
是一种语法异常。它不是特定于bash
的,它与ksh
相同,但是在zsh
中不需要;
。
第三种解决办法
换行符表示单个命令(“;”)的结尾。在单行版本中,将}
解析为未终止的ls -a
命令的参数。您可以查看是否这样做:
$ foo(){ echo "a" }
}
$ foo
a }
看看函数声明中的命令如何吞下尾随的花括号?