Co oznacza %% w nazwie funkcji?

11

Patrząc na wynik envzauważyłem, że jest też następująca funkcja.

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

Zawartość pliku /usr/share/mc/mc-wrapper.sh jest następująca.

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

Co %%oznaczają znaki w nazwie funkcji? Czy sprawiają, że funkcja jest wywoływana w określonych przypadkach, czy też pozwalają mi nazywać ją inaczej niż inne funkcje?

Używam openSUSE 42.3 z Bash w wersji 4.3.42 (1) -release (x86_64-suse-linux-gnu), jeśli to robi jakąkolwiek różnicę.

kiamlaluno
źródło

Odpowiedzi:

15

Nazwa funkcji została spreparowana przez bashaktualizację w odpowiedzi na usterkę shellshock .

Było to funkcja o nazwie mc, która była eksportowana i twoja bashwersja jest zmiana nazwy przez poprzedzenie go BASH_FUNC_i zastąpienie ()przez %%.

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

Oto bashłatka autorstwa Floriana Weimera, która wprowadziła tę poprawkę, z dnia 25 września 2014 r .:

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

Zauważ, że nazwa funkcji może zawierać prawie dowolne znaki, bashpodobnie jak nazwa polecenia w ogóle (tj. Nazwa pliku), więc na %%pewno jest tutaj poprawna.

jlliagre
źródło
3

Wygląda na to, że bash z przyjemnością używa% znaków w nazwach funkcji:

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

podczas gdy np. dash ich nie lubi:

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

O ile wiem, %% nie ma żadnego specjalnego znaczenia w nazwie funkcji bash. To byłoby jak użycie XX zamiast tego. Dzieje się tak pomimo definicji a namena stronie podręcznika:

   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.
Wodin
źródło
Ale po tym jest =znak równości %%! Co powoduje przypisanie tam.
αғsнιη
2
Tak właśnie envwydrukowano definicję funkcji.
Wodin