bash 函数定义中意外令牌附近的语法错误

Moz*_*zer 3 shell bash function

对不起; 我对 bash 文件等很陌生。这是我的 .bashrc 的副本:

alias k='kate 2>/dev/null 1>&2 & disown'

function kk {kate 2>/dev/null 1>&2 & disown}
Run Code Online (Sandbox Code Playgroud)

第一行中的别名工作正常,但第二行抛出:

bash: /home/mozershmozer/.bashrc: line 3: syntax error near unexpected token `{kate'
bash: /home/mozershmozer/.bashrc: line 3: `function kk {kate 2>/dev/null >1>&2 & disown}'
Run Code Online (Sandbox Code Playgroud)

我正在运行 Linux Mint 17.3,这是我的 .bashrc 文件中仅有的两行。我机器上的几乎所有其他东西都是默认的香草。最终我想玩弄这个函数来让它做一些特定的事情,但我立即撞上了语法墙。我在这里列出的确切函数只是一种实验性的假人,让我可以更清楚地学习语法。

Fox*_*Fox 8

bash和其他POSIX外壳,{并且}是不完全的特殊符号这么多,因为他们都是特殊的话在这方面。在创建像函数定义那样的复合命令时,重要的是它们仍然是words,即被空格包围。

像这样的单行函数定义中的最后一个命令必须以分号终止。否则,右大括号将}被视为命令的参数。


顺便说一句,如果您希望您的函数可移植到其他 POSIX shell,最好使用不同的函数语法:

kk () { kate 2>/dev/null 1>&2 & disown; }
Run Code Online (Sandbox Code Playgroud)

的使用function特定于bash,而此处给出的形式也适用于bashsh、Korn 和 Almquist shell 等其他形式。

disown 也是 bash 特定的。