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

シェル変数の関数?

bashシェル変数での関数の使用に関するこの投稿を読んでいます。シェル関数を使用するには、次のようにそれらをエクスポートして子シェルで実行する必要があることに気付きました。

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

関数をbashシェル変数で定義して、エクスポートを使用せずに新しいシェルを実行せずに現在のシェルで実行できるようにすることは可能かどうかを尋ねたいですか?

承認された回答:

いいえ、できません。

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

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

Shellshockの前は、関数を変数内に格納し、変数をエクスポートし、関数をサブシェルで使用できます。これは、bash エクスポート機能、bashをサポート 関数定義を次のような環境変数に入れます:

foo=() {
  echo "Inside function"
}

次に、replace =で関数を解釈します スペースあり。関数を変数に入れる意図はなく、変数を参照すると関数が実行されます。

現在、StéphaneChazelasがバグを発見した後、その機能は削除され、関数定義はプレーン環境変数に保存されなくなりました。エクスポートされた関数は、プレフィックスBASH_FUNC_を追加することでエンコードされます。 接尾辞%% 環境変数との衝突を避けるため。 bash インタプリタは、変数の内容に関係なく、それらがシェル関数であるかどうかを判断できるようになりました。また、サブシェルで使用するには、関数を定義して明示的にエクスポートする必要があります。

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

とにかく、あなたの例があなたの現在のbashでうまくいったなら 、次に脆弱なバージョンを使用しています。


Linux
  1. sourceコマンドを使用して関数と変数をBashにインポートします

  2. シェル環境変数の設定| BASHシェル

  3. Bashシェルのカスタマイズ

  1. Bashシェル関数での循環名参照、ただしKshではない?

  2. 関数とパラメータを変数として持つシェルスクリプト?

  3. 複数のシェルスクリプト間で変数を共有しますか?

  1. (bash)シェルの特別なパラメーター/変数はどれですか?

  2. Bash初心者シリーズ#9:Bashでの関数の使用

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