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