BSD 有 58 个以上内置命令

BSD 有 58 个以上内置命令

我读了内置函数bsd 内置(1)和 gnu 版本Ubuntu 手册页:bash-builtins - bash 内置命令,请参阅 bash(1)

In [25]: print(bsd_bins)                                                                                          
['!', '%', '.', ':', '@', '{', '}', 'alias', 'alloc', 'bg', 'bind', 'bindkey', 'break', 'breaksw', 'builtins', 'case', 'cd', 'chdir', 'command', 'complete', 'continue', 'default', 'dirs', 'do', 'done', 'echo', 'echotc', 'elif', 'else', 'end', 'endif', 'endsw', 'esac', 'eval', 'exec', 'exit', 'export', 'false', 'fc', 'fg', 'filetest', 'fi', 'for', 'foreach', 'getopts', 'glob', 'goto', 'hash', 'hashstat', 'history', 'hup', 'if', 'jobid', 'jobs', 'kill', 'limit', 'local', 'log', 'login', 'logout', 'ls-F', 'nice', 'nohup', 'notify', 'onintr', 'popd', 'printenv', 'pushd', 'pwd', 'read', 'readonly', 'rehash', 'repeat', 'return', 'sched', 'set', 'setenv', 'settc', 'setty', 'setvar', 'shift', 'source', 'stop', 'suspend', 'switch', 'telltc', 'test', 'then', 'time', 'times', 'trap', 'true', 'type', 'ulimit', 'umask', 'unalias', 'uncomplete', 'unhash', 'unlimit', 'unset', 'unsetenv', 'until', 'wait', 'where', 'which', 'while']

In [26]: print(gnu_bins)                                                                                          
[':', '.', '[', 'alias', 'bg', 'bind', 'break', 'builtin', 'case', 'cd', 'command', 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown', 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc', 'fg', 'getopts', 'hash', 'help', 'history', 'if', 'jobs', 'kill', 'let', 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'read', 'readonly', 'return', 'set', 'shift', 'shopt', 'source', 'suspend', 'test', 'times', 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset', 'until', 'wait', 'while']

In [32]: len(set(bsd_bins) - set(gnu_bins))                                                                       
Out[32]: 58

In [28]: print(set(bsd_bins) - set(gnu_bins))                                                                     
{'elif', 'end', 'setenv', 'login', 'nohup', 'done', 'glob', 'notify', 'echotc', 'alloc', 'then', 'which', 'endsw', 'stop', 'switch', 'default', 'builtins', 'false', 'setty', 'printenv', '@', 'uncomplete', 'fi', 'do', 'nice', 'bindkey', 'ls-F', 'unhash', '!', 'unlimit', 'limit', 'foreach', 'hup', 'telltc', 'log', 'where', 'jobid', 'repeat', 'unsetenv', 'chdir', 'settc', 'setvar', '%', 'filetest', 'sched', 'endif', 'goto', 'hashstat', 'rehash', 'breaksw', 'onintr', 'for', '}', '{', 'time', 'true', 'else', 'esac'}

BSD 多出了 58 个内置命令,造成这种差异的原因是什么?

答案1

引用您引用的 bsd 内置链接:

这里只列出了 csh(1) 和 sh(1) shell 的内置命令。

据我所知,FreeBSD 上的 /bin/sh 是灰烬。因此,您引用的页面包含两个 shell 的内置命令。您引用的 Ubuntu 页面仅包含一个 shell 的内置命令 - bash。

相关内容