함수 이름에서 %%은 무슨 뜻입니까?


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을 사용하고 있습니다.

답변:


15

함수 이름은 shellshock 취약점에 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일반적인 명령 이름 (예 : 파일 이름)과 같이 거의 모든 문자를 포함 할 수 있으므로 %%여기에서 확실히 유효합니다.


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.

그러나 거기에 등호 =가 있습니다 %%! 거기에 할당이 발생합니다.
αғsнιη

2
이것이 바로 env함수 정의를 인쇄 한 방법 입니다.
Wodin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.