对不起;我对 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
,而此处给出的形式适用于bash
sh、Korn 和 Almquist shell 等其他 shell。
disown
也是 bash 特定的。
答案2
将其放在多行中可以避免放入额外的;
,并且提供了一种编写函数的方法,即使它包含大量命令也是如此。
function kk {
kate 2>/dev/null 1>&2 & disown
}