マニュアルによるとシェル関数とシェルコマンドの違いは「それを起動するシェルプロセスで実行されるか、フォークされて別プロセスで実行されるか」らしいです。 % function echo-pid-function { function> echo $$ function> } % cat << 'EOF' > echo-pid-command heredoc> #!/bin/zsh heredoc> echo $$ heredoc> EOF % echo $$ 84532 % echo-pid-function 84532 # シェルと同じ % ./echo-pid-command 84949 # シェルと違う バックグラウンドに移した場合の挙動の違い ctrl-zを押した時にフォアグラウンドジョブがバックグラウンドに移りますが、シェル関数はシェルと同じプロセス上で動いているので、シェル関数実