Bash - シェル変数の関数

Bash - シェル変数の関数

私はこれを読んでいます郵便はがきBash シェル変数で関数を使用する場合。シェル関数を使用するには、次のようにその関数をエクスポートし、サブシェルで実行する必要があることがわかりました。

$ export foo='() { echo "Inside function"; }'
$ bash -c 'foo'
Inside function

エクスポートを使用したり、新しいシェルを実行しなくても、現在のシェルで実行できるように bash シェル変数で関数を定義できるかどうかを尋ねたいと思います。

ベストアンサー1

いいえ、できません。

現在のシェルで関数を使用するには、関数を定義して使用します。

$ foo() { echo "Inside function"; }
$ foo
Inside function

今後シェルショックこれで、変数に関数を保存し、変数をエクスポートし、サブシェルで関数を使用できるようになりました。エクスポートされたbash関数がサポートされているためbash関数定義を環境変数に入れます。良い:

foo=() {
  echo "Inside function"
}

=その後、関数はスペースで置き換えて解釈されます。関数を変数に入れ、変数を参照して関数を実行する意図はありません。

今、その後スティーブン・チャジェラスエラーが見つかりました。この機能は削除されました。、関数定義は通常の環境変数に保存されません。エクスポートされた関数は、環境変数との競合を避けるためにBASH_FUNC_プレフィックスとサフィックスを追加してエンコードされます。これで、インタプリタは変数の内容に関係なくシェル関数かどうかを判断できます。また、サブシェルで使用するには、関数を定義して明示的にエクスポートする必要があります。%%bash

$ foo() { echo "Inside function"; }
$ export -f foo
$ bash -c foo
Inside function

とにかく、あなたの例が現在のバージョンで動作している場合は、bash脆弱なバージョンを使用しています。

おすすめ記事