BASH中的空函数

问题描述 投票:27回答:4

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

不幸的是,FPM生成的bash脚本包含这样的功能

dummy() {
}

这个脚本退出时出错:

语法错误:“}”意外

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

bash ubuntu mint
4个回答
35
投票

您可以使用相当于:true,并且主要用作无操作符...

dummy(){
     : 
  }

8
投票

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

一个“:”(空命令)可以放在函数中,如果你想“做什么”

见:http://tldp.org/LDP/abs/html/functions.html


6
投票

一个班轮

dummy(){ :; }


:是null命令

一行格式需要;


0
投票

我推荐这个:

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
# ..
© www.soinside.com 2019 - 2024. All rights reserved.