Що означає %% у назві функції?


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

Що %%символи означають у назві функції? Чи роблять вони це функцією, яку викликають у конкретних випадках, чи дозволяють мені називати її інакше, ніж інші функції?

Я використовую openSUSE 42.3, з версією Bash 4.3.42 (1) -release (x86_64-suse-linux-gnu), якщо це має значення.

Відповіді:


15

Ім'я функції було створено bashоновленим як відповідь на вразливість оболонки .

mcБула експортована функція, назва якої було bashперейменовано, і ваша версія перейменовує її попередньо, BASH_FUNC_замінивши ()на %%.

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

Ось bashпатч Флоріана Ваймера, який представив це виправлення від 25 вересня 2014 року:

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анонімної сторінки на сторінці:

   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.

Але тут є =знак рівності після %%! Що викликає присвоєння там.
αғsnιη

2
Саме так envдрукується визначення функції.
Водін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.