POSIX 인쇄 기능 정의

POSIX 인쇄 기능 정의

Bash는 함수 정의를 인쇄할 수 있습니다:

$ bash -c 'y(){ echo z; }; export -f y; export -f'
y ()
{
    echo z
}
declare -fx y

그러나 이는 POSIX Bash에서는 실패합니다./bin/sh그리고/빈/대시:

$ bash --posix -c 'y(){ echo z; }; export -f y; export -f'
export -f y

POSIX 쉘에서 함수 정의를 인쇄할 수 있습니까?

답변1

이 작업은 휴대용으로 수행할 수 없습니다. POSIX 사양은 함수 정의를 덤프하는 방법이나 함수 구현 방법을 지정하지 않습니다.


에서는 bash함수를 환경으로 내보낼 필요가 없으며 다음을 사용할 수 있습니다.

declare -f funcname

(그 일을 수행하다 zsh)

이는 모드 bash에서 실행 하는 경우에도 작동합니다.posix

$ bash --posix -c 'y(){ echo z; }; declare -f y'
y () 
{ 
    echo z
}

존재하다 ksh:

typeset -f funcname

(에 적용 가능 bash, zsh, mksh, pdksh)lksh


존재하다 yash:

typeset -fp funcname

yash입력하면 작동하지 않습니다.POSIX 올바른 모드:

$ yash -o posixly-correct -c 'y() { ehco z; }; typeset -fp y'
yash: no such command `typeset'

그리고 zsh:

print -rl -- $functions[funcname]
whence -f funcname
type -f funcname
which funcname

whence -f, 은(는 ) 이름이 같은 모든 보고서 별칭을 먼저 표시 which합니다 . 모든 정의 보고를 type -f사용할 수 있습니다 .-azsh


POSIXly에서는 함수 정의를 직접 문서화해야 합니다. 다음과 같이 할 수 있습니다.

myfunction_code='myfunction() { echo Hello World; }'
eval "$myfunction_code"

또는 도우미 기능

defn() {
  code=$(cat)
  eval "${1}_code=\$code; $1() { $code; }"
}

defn myfunction << 'EOF'
echo Hello World
EOF

printf '%s\n' "$myfunction_code"

답변2

아니, 적어도 내가 아는 한은 아니다.

-f확장 프로그램입니다POSIX 내보내기.

POSIX set(및 bash setPOSIX 모드)에서는 함수 정의도 제외됩니다.

관련 정보