출력을 보면 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을 사용하고 있습니다.
답변1
함수 이름은 bash
쌍으로 업데이트를 통해 신중하게 만들어집니다.쉘 쇼크취약점.
mc
내보내기 라는 이름의 함수가 있는데 , 버전 bash
에서 앞에 추가하고 로 BASH_FUNC_
바꿔서 ()
이름을 바꾸고 있습니다 %%
.
$ d() { date ; }
$ export -f d
$ env | grep %%
BASH_FUNC_d%% { date
다음은 bash
2014년 9월 25일 Florian Weimer가 도입한 패치입니다.
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
맨페이지에 정의되어 있음에도 불구하고 이는 다음과 같습니다.
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.