GNU/Linux >> Linux の 問題 >  >> Linux

以下で宣言された呼び出し関数

他の人が言ったように、それはできません。

ただし、コードを 1 つのファイルに配置して、メイン プログラムをファイルの先頭に配置し、他の関数をその下に定義する場合は、別の main を作成することで実行できます。 関数。

例えば。

#!/bin/sh

main() {
    if [ "$1" = yes ]; then
        do_task_this
    else
        do_task_that
    fi
}

do_task_this() {
    ...
} 
do_task_that() {
    ...
} 

main "[email protected]"; exit

main を呼び出すとき ファイルの最後では、すべての関数が既に定義されています。 "[email protected]" を明示的に渡す main まで スクリプトのコマンド ライン引数を関数内で可視にするために必要です。

明示的な exit main の呼び出しと同じ行に配置することは必須ではありませんが、スクリプト ファイルが変更された場合に実行中のスクリプトが台無しになるのを防ぐために使用できます。これがないと、シェルは main 以降、スクリプト ファイルからコマンドを読み込もうとします。 戻り値。 (実行前にシェルスクリプト全体を読む方法を参照してください)


いいえ、関数は呼び出し時にシェル環境に存在する必要があります。

Google の「Shell Style Guide」には、これに対する修正があります:

<ブロック引用>

main という関数 少なくとも 1 つの他の関数を含めるのに十分な長さのスクリプトには必須です。

スクリプトの最後で、すべての関数の後、関数内にない唯一のステートメントとして、

main "[email protected]"

これは main を呼び出します スクリプトに与えられたパラメーターを使用して関数を実行します。 main 関数はスクリプトの上部に配置できます (スタイル ガイドでは下部に配置するように指示されていますが、繰り返しになりますが、多くのことが書かれています)。

シェルが main に到達したとき 呼び出し、スクリプト内のすべての関数が解析されているため、main 内から呼び出すことができます 関数。


いいえ、関数は使用する前に宣言する必要があります。シェル スクリプトは 1 行ずつ読み取られ、1 行ずつ実行されます。そのため、宣言が実行されるまで関数は存在しません。


Linux
  1. Find -exec呼び出しでユーザー定義関数を実行しますか?

  2. Awk内のBashスクリプトでBash関数を呼び出す方法は?

  3. PHPの致命的なエラー:未定義の関数Thesql_connect()の呼び出し?

  1. Bash で関数を作成して呼び出す方法

  2. プログラムがctrl cで終了したときに関数を呼び出す

  3. 読み取り関数呼び出しでタイムアウトを実装するには?

  1. EINTR をチェックして関数呼び出しを繰り返すのはいつですか?

  2. メイン関数が返したものを取得するにはどうすればよいですか?

  3. exit() がプロセスの終了に失敗することはありますか?