bash 函数定义中意外标记附近的语法错误

bash 函数定义中意外标记附近的语法错误

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

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

function kk {kate 2>/dev/null 1>&2 & disown}

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

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}'

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

答案1

bash和其他 POSIX shell 中,{并且}并不完全特殊符号尽管它们很特别在此背景下。在创建函数定义中的复合命令时,保留它们很重要,即被空格包围。

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


作为旁白,如果如果您希望函数能够移植到其他 POSIX shell,最好使用不同的函数语法:

kk () { kate 2>/dev/null 1>&2 & disown; }

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

disown也是 bash 特定的。

答案2

将其放在多行中可以避免放入额外的;,并且提供了一种编写函数的方法,即使它包含大量命令也是如此。

function kk {
    kate 2>/dev/null 1>&2 & disown
}

相关内容