질문에 답한 사람은 없다고 생각합니다. 그는 순서대로 문자열을 에코 할 수 있는지 묻지 않았습니다. 오히려 질문의 작성자는 함수 포인터 동작을 시뮬레이션 할 수 있는지 알고 싶어합니다.
내가했던 것과 매우 유사한 몇 가지 답변이 있으며 다른 예를 통해 확장하고 싶습니다.
저자로부터 :
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
이를 확장하기 위해 함수 x echo "Hello world : $ 1"함수 실행이 실제로 발생하는시기를 표시합니다. 함수 "x"의 이름 인 문자열을 전달합니다.
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
이를 설명하기 위해 문자열 "x"가 "before"를 에코하는 around () 함수에 전달되고, 인수 "HERE"를 전달하는 x 함수 (변수 $ 1, 주위에 전달 된 첫 번째 매개 변수를 통해)를 호출하고, 마지막으로 이후에 에코됩니다. .
다른 방법으로는 변수를 함수 이름으로 사용하는 방법입니다. 변수는 실제로 함수의 이름 인 문자열을 보유하고 ($ variable arg1 arg2 ...) 인수를 전달하는 함수를 호출합니다. 아래를 참조하십시오.
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x"
($Z 10 20 30)
30 10 20, 여기서 변수 Z에 저장된 "x"라는 함수를 실행하고 매개 변수 10 20 및 30을 전달했습니다.
함수 이름을 실제로 아는 대신 변수를 사용할 수 있도록 함수에 변수 이름을 할당하여 함수를 참조합니다 (이는 프로그램 흐름을 일반화하기 위해 c에서 매우 고전적인 함수 포인터 상황에서 수행 할 수있는 작업과 유사하지만 -명령 줄 인수를 기반으로 할 함수 호출 선택).
bash에서는 함수 포인터가 아니라 나중에 사용하는 함수 이름을 참조하는 변수입니다.