Bash: "bash -c"で関数を呼び出す

Bash: "bash -c"で関数を呼び出す

私のbash関数がbash -c

現在のスクリプト:

#!/bin/bash

inner_function () {
    echo "$1"
    }
outer_function () {
    bash -c "echo one; inner_function 'two'"
    }
outer_function

現在の出力:

$ /tmp/test.sh 
one
bash: inner_function: command not found

希望の出力:

one

two

答え1

エクスポート:

typeset -xf inner_function

例:

#! /bin/bash
inner_function () { echo "$1"; }
outer_function () { bash -c "echo one; inner_function 'two'"; }
typeset -xf inner_function
outer_function

同じ内容を作成する別の方法はexport -f inner_functionorですdeclare -fx inner_function

エクスポートされたシェル関数は次のとおりです。ㅏ)bash専用の機能で、他のシェルではサポートされていません。雨)ほとんどのバグが修正されたとしても、まだ議論の余地がありますシェルショック

答え2

複数のスクリプトに同じ機能が必要な場合は、サイドの「ライブラリ」スクリプトファイルに入れ、その機能が必要なスクリプトに「ソース」(source the_lib_scriptまたは)を配置します。. the_lib_script

関連情報