BASH中的空函数

BASH中的空函数,bash,ubuntu,linux-mint,Bash,Ubuntu,Linux Mint,我正在使用FPM工具创建.deb包。此工具在从支持的文件中删除包之前/之后创建 不幸的是,FPM生成的bash脚本包含这样的函数 dummy() { } 此脚本退出时出错: 语法错误:“}”意外 BASH不允许空函数吗?哪个版本的bash/linux有这个限制?您可以使用:,它相当于true,并且是最常用的 作为不做任何事的接线员 dummy(){ : } 空的bash函数可能是非法的。只包含注释的函数也将被视为空函数 如果您想“不执行任何操作”,可以在函数中放置“:”(nu

我正在使用FPM工具创建.deb包。此工具在从支持的文件中删除包之前/之后创建

不幸的是,FPM生成的bash脚本包含这样的函数

dummy() {
}
此脚本退出时出错:

语法错误:“}”意外


BASH不允许空函数吗?哪个版本的bash/linux有这个限制?

您可以使用
,它相当于
true
,并且是最常用的 作为不做任何事的接线员

dummy(){
     : 
  }

空的bash函数可能是非法的。只包含注释的函数也将被视为空函数

如果您想“不执行任何操作”,可以在函数中放置“:”(null命令)

请参阅:

一行

dummy(){:;}


是空命令

需要一行格式

我建议这样做:

dummy(){unused(){:;}}


如果使用
null命令,它将通过xtrace选项打印:

(
    set -o xtrace
    dummy(){ :; }
    dummy "null command"
)

echo ------

(
    set -o xtrace
    dummy(){ unused(){ :;} }
    dummy "unused function"
)
输出:

+ dummy 'null command'
+ :
------
+ dummy 'unused function'

对于调试,我使用如下包装:

main() {(
    pwd # doing something in subshell
)}

print_and_run() {
    clear
    (
        eval "$1() { unused() { :; } }"
        set -o xtrace
        "$@"        
    )
    time "$@"
}

print_and_run main aaa "bb bb" ccc "ddd"
# output:
# + main aaa 'bb bb' ccc ddd
# ..

考虑添加一个例子来演示如何在函数中实现这一点。您是对的,但这可能是一个更好的答案,只需稍加解释,因此您可能可以编写
true
,以提高可读性。(我想不是每个人都知道或者很容易理解
是什么。)空格a也是必需的
dummy(){:;}
将不起作用。有关这是语法错误的原因,请参阅