declare -f
Bash 및 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