7

シェルに供給されるbashスクリプトにこの関数を含めることができます

function suman{
     echo "using suman function"
}

私が電話したら

unset suman

物事は期待どおりに機能しているようです

ただし、これを関数として持っている場合:

function suman-inspect {
     echo "using suman-inspect function"
}

それから私が電話したら

unset suman-inspect

また

unset "suman-inspect"

次のメッセージが表示されます。

bash: unset: `suman-inspect': not a valid identifier

この変数をそのまま設定解除するにはどうすればよいですか?

4

2 に答える 2

6

もう少し研究した結果、

unset -f "suman-inspect"

動作します。これは驚くべきことです。なぜならunset suman、正常に動作し、スーマン機能の設定を正常に解除できたからです (私が知る限り)。

于 2016-11-25T22:29:25.033 に答える
2

Bash では、posix モードでないときに、有効な識別子ではない名前を持つ関数を作成できます。

そう:

set -o posix
function suman-inspect { echo "using suman-inspect function"; }

与えます:

bash: `suman-inspect': not a valid identifier

ruakhは を引用することで有効な点を指摘していman bashます。ソース コード ( builtins/set.def) には次のコメント があります

POSIX 標準では、-f も -v も指定されていない場合、name は変数を参照します。その名前の変数が存在しない場合、その名前の関数が存在する場合、その関数を設定解除するかどうかは指定されていません。

したがって、実際の動作は古いスタンバイの「未指定*」です。どちらかといえば、エラーはbashのドキュメントにあります。しかし、公平を期すために、他の場所では次のman bashように述べています。

unset ビルトインに -f オプションを使用すると、関数定義を削除できます。

于 2016-11-26T08:40:04.957 に答える