シェル関数と別名は子プロセスを生成しますか?

シェル関数と別名は子プロセスを生成しますか?

シェル関数と別名は子プロセスを生成しますか?それともすべてシェルプロセス内で実行されますか?

答え1

いいえ。

エイリアスは、その行をトークンに解析する前に、特定の文字列を1つ以上の単語に置き換えます。シェルのコンテキストを変更する必要はありません。

Bash マニュアルで始めるシェル機能:

シェル機能は現在シェルのコンテキストで実行され、それを解釈するための新しいプロセスは作成されません。

関数を構成するコードがbash (…)(kshではない)のように実際に子プロセスを分岐しない限り。中括弧の代わりに(または追加で)括弧を使用して関数を定義できます。

テスト:

#!/bin/bash
func(){ echo "$BASHPID"; }
fork()( echo "$BASHPID"; )
echo "$BASHPID"
func
fork

実行時:

$ ./script
8731
8731
8753

フォーク機能を以下のように理解してください。

fork(){
        ( echo "BASHPID" )
      }

関連情報