BASH中的空函数

use*_*394 32 bash ubuntu linux-mint

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

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

dummy() {
}
Run Code Online (Sandbox Code Playgroud)

这个脚本退出时出错:

语法错误:"}"意外

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

ore*_*iss 42

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

dummy(){
     : 
  }
Run Code Online (Sandbox Code Playgroud)

  • 您也可以编写 `true` 以提高可读性。(我想不是每个人都知道或很容易理解`:` 是什么。) (3认同)

小智 8

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

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

请参阅:http://tldp.org/LDP/abs/html/functions.html


Job*_*Job 8

一班轮

dummy(){ :; }


: 是空命令

; 需要单行格式

  • 空格也是必需的!`dummy(){:;}`将不起作用。 (2认同)

Dam*_*ian 6

我推荐这个:

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


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

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

echo ------

(
    set -o xtrace
    dummy(){ unused(){ :;} }
    dummy "unused function"
)
Run Code Online (Sandbox Code Playgroud)

输出:

+ dummy 'null command'
+ :
------
+ dummy 'unused function'
Run Code Online (Sandbox Code Playgroud)

对于调试,我使用这样的包装器:

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
# ..
Run Code Online (Sandbox Code Playgroud)