web-dev-qa-db-ja.com

BASHの空の関数

FPMツールを使用して.debパッケージを作成しています。このツールは、サポートされているファイルからパッケージを削除する前/後に作成します。

残念ながら、FPMによって生成されたbashスクリプトにはそのような関数が含まれています

dummy() {
}

そして、このスクリプトはエラーで終了します:

構文エラー: "}"予期しない

BASHは空の関数を許可しませんか? bash/linuxのどのバージョンにこの制限がありますか?

33
user3550394

:これはtrueと同等で、ほとんど何もしない演算子として使用されます...

dummy(){
     : 
  }
38
orestiss

空のbash関数は不正な場合があります。コメントのみを含む関数も空であると見なされます。

「何もしない」場合は、「:」(nullコマンド)を関数に配置できます。

参照: http://tldp.org/LDP/abs/html/functions.html

8
YangwuWang

ワンライナー

dummy(){ :; }


:はnullコマンドです

;は1行の形式で必要です

6
JobJob

私はこれをお勧めします:

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
# ..
0
Damian Trzeciak