%%在函数名称中表示什么?


11

查看的输出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,如果有什么不同的话。

Answers:


15

该函数名称是通过bashShellshock漏洞的响应进行更新而制作的。

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像一般的命令名称(即文件名)一样包含几乎任何字符,因此%%在此绝对有效。


3

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

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

而例如破折号不喜欢他们:

$ 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.

但是在=那之后有一个相等的符号%%!在那里导致分配。
αғsнιη

2
这就是env函数定义的打印方式。
Wodin '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.