シェルスクリプトの主な機能はどこにありますか?

シェルスクリプトの主な機能はどこにありますか?

さまざまな実行関数の名前を提供するFUNCNAME配列変数を使用しています。使用中にmain内部の機能を発見しました${FUNCNAME[max_ind]}

mainこの関数はシェルスクリプトのどこで定義されていますか?どのコードが書かれており、どのようにmain使用しますか?デフォルトでは、この機能に関するすべての情報ですmain

答え1

これがシェルスクリプトの主なレベルです。

FUNCNAMEそれ自体はBashに固有のものに見え、マニュアルページには次のように表示されます。

現在実行中の呼び出しスタック内のすべてのシェル関数の名前を含む配列変数。インデックス0の要素は、現在実行中のシェル関数の名前です。一番下の要素(インデックスが最も高い要素)は「main」です。この変数は、シェル関数の実行時にのみ存在します。

これは、たとえば、次のスクリプトのように乱雑になる可能性があることを意味します。

#!/bin/bash
main() {
        foo
}
foo() {
        declare -p FUNCNAME;
}
main

印刷されます

declare -a FUNCNAME=([0]="foo" [1]="main" [2]="main")

2つのmain機能が同じではありませんが。

という関数を明示的に生成することはそれほど無理ではありませんmain。専用のメイン関数を使用すると、メインプログラムがある場所にあり、他の関数定義の間に分散していない可能性があるため、コードを構造化するのに役立ち、スクリプトを読みやすくすることができます。

main "$@"; exit実行中にスクリプトファイルが変更されても実行中のスクリプトに影響を与えないようにするために、すべてを関数に入れてメインレベルで呼び出すイディオムもあります。望むより:実行する前に完全なシェルスクリプトを読む方法は?

main同様の目的で、Pythonのようなより有名なものの代わりにBashを使用することを選択した理由がわかりません。__main__

関連情報