函数名中的%%是什么意思?

函数名中的%%是什么意思?

查看 的输出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

%%函数名中的字符是什么意思?他们是否使其成为在特定情况下调用的函数,或者他们是否允许我以不同于其他函数的方式调用它?

如果有什么区别的话,我使用的是 OpenSUSE 42.3,带有 Bash 版本 4.3.42(1)-release (x86_64-suse-linux-gnu)。

答案1

函数名称是通过bashupdate 精心设计的,作为对炮弹休克症脆弱性。

有一个名为的函数mc已导出,您的bash版本正在通过在前面添加BASH_FUNC_并替换()为 来重命名它%%

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

以下是bashFlorian Weimer 于 2014 年 9 月 25 日发布的引入此修复程序的补丁:

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

请注意,函数名称可以包含几乎任何字符,bash就像一般的命令名称(即文件名)一样,因此%%在这里绝对有效。

答案2

bash 似乎很乐意在函数名称中使用 % 字符:

bash$ TEST%%() { echo test; }
bash$ TEST%%
test

而例如 dash 不喜欢它们:

$ TEST%%() { echo test; }
dash: 1: Syntax error: Bad function name

据我所知, %% 在 bash 函数名称中没有任何特殊含义。就像用 XX 代替一样。尽管name在联机帮助页中定义了 a ,但这仍然是这样:

   name   A word consisting only of  alphanumeric  characters  and  under-
          scores,  and beginning with an alphabetic character or an under-
          score.  Also referred to as an identifier.

相关内容