関数名の%%はどういう意味ですか?

関数名の%%はどういう意味ですか?

出力を見ると、env次の関数もリストされていることがわかりました。

BASH_FUNC_mc%%=() {  . /usr/share/mc/mc-wrapper.sh }

/usr/share/mc/mc-wrapper.sh ファイルの内容は次のとおりです。

MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
        MC_PWD="`cat "$MC_PWD_FILE"`"
        if test -n "$MC_PWD" && test -d "$MC_PWD"; then
                cd "$MC_PWD"
        fi
        unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE

%%関数名の文字はどういう意味ですか?特定の状況で呼び出される関数として作成しますか?それとも他の関数とは異なる呼び出しを許可しますか?

違いがある場合は、Bashバージョン4.3.42(1)-リリース(x86_64-suse-linux-gnu)でOpenSUSE 42.3を使用しています。

ベストアンサー1

関数名は、bashペアで更新によって慎重に作成されます。シェルショック脆弱性。

mcエクスポートという名前の関数がありますが、バージョンbashで前に追加してにBASH_FUNC_変更して()名前を変更しています%%

$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date

以下は、bash2014年9月25日にFlorian Weimerが導入したパッチです。

http://seclists.org/oss-sec/2014/q3/att-693/variables-affix.patch

関数名には、bash通常のコマンド名(ファイル名など)と同様に、ほぼすべての文字を含めることができるため、%%ここでは絶対に有効です。

おすすめ記事