zsh에서는 `declare -F`가 작동하지 않습니다.

zsh에서는 `declare -F`가 작동하지 않습니다.

declare -fBash 및 zsh에 함수 정의를 표시합니다.

$ declare -f
VCS_INFO_adjust () {
    # undefined
    builtin autoload -XUz
}
VCS_INFO_bydir_detect () {
    # undefined
    builtin autoload -XUz
}
VCS_INFO_check_com () {
    setopt localoptions NO_shwordsplit
    case $1 in
        (/*) [[ -x $1 ]] && return 0 ;;
        (*) (( ${+commands[$1]} )) && return 0 ;;
    esac
    return 1
}
....

declare -F표시된 함수 이름은 bash이지만 zsh에는 없습니다.

blueray@blueray-PC:~$ declare -F
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __git_eread
declare -f __git_ps1
declare -f __git_ps1_colorize_gitstring
declare -f __git_ps1_show_upstream
declare -f __grub_dir
declare -f __grub_get_last_option
....

그 이유는 무엇입니까?

답변1

Zsh에서는declare -F배정밀도 부동 소수점 변수 선언:

$ declare -F myvar
$ echo $myvar
0.0000000000

Zsh의 모든 함수 이름을 나열하려면 typeset -f +.

에서는 특수 연관 배열이 함수 이름을 해당 정의에 매핑하여 다음 으로 확장 할 수 있습니다 zsh.$functions${(k)functions}열쇠연관 배열은 함수 이름 목록으로도 확장됩니다.

Bash와 Zsh는 서로 다른 쉘이므로 정확히 동일하게 작동할 것이라고 기대할 수 없습니다.

답변2

declare비표준 쉘 확장입니다.

bash이것이 및 에서 동일하게 잘 작동할 것이라고 기대할 수는 없습니다 zsh.

일반적으로 셸 스크립트에서 비표준 확장을 사용하려면 해당 확장이 설계된 셸을 사용하고 예상한 동작을 달성해야 합니다. 즉, bash동작을 얻으려면 bash스크립트에서 fr을 사용하십시오.

그런데 사용하고 싶은 기능은 다음에서 사용할 수 없습니다.POSIX

관련 정보