Comparison of command shells

From Wikipedia, the free encyclopedia

  (Redirected from Comparison of computer shells)
Jump to: navigation, search

A command shell is a command line interface computer program to an operating system.

bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL[2]
Usual environment POSIX POSIX POSIX POSIX POSIX POSIX POSIX POSIX Win32 Win32 .NET DOS DOS OS/2 Plan 9, POSIX Java Python Ruby OpenVMS
Introduced 1987 1978 1981 ? 1994 1982 1989 ? 1990 1989 1993 1993 2006 1980 1989 1987 1989 2005 1991 1995 1977 ?
Tab completion Yes (extendable) Yes (via the ESC key) Yes (extendable) No Yes (extendable) Yes Yes (extendable) No Yes Yes Yes (extendable) No Yes Yes Yes[3] Yes Yes (provided by the rlcompleter module or IPython) Yes No
Pipes text
concurrent
text
concurrent
text
concurrent
text text, objects
concurrent
text
concurrent
text
concurrent
text
concurrent
text
concurrent
text objects
concurrent
text
sequential
temporary files
text
sequential
temporary files
text
concurrent
text
concurrent
not supported Yes (provided by IPython) not supported text
(via PIPE command)
Integer arithmetic Yes (via $(( )), (( )) and let syntax) Yes (via @ syntax) Yes (via @ syntax) Yes Yes (via $(( )), (( )), let syntax and expr builtin) Yes (via $(( )) syntax) Yes (via $(( )), (( )) and let syntax) Yes [4] Yes (via "set /a") Yes (via %@eval[ ] function) Yes No Yes (via %@eval[ ] function) No No Yes Yes Yes Yes
Typing discipline dynamic
weak
dynamic
weak
dynamic
weak
dynamic
strong
dynamic
weak
dynamic
weak
dynamic
weak
dynamic
weak
dynamic
weak
dynamic
weak
dynamic or static
strong
dynamic
weak
dynamic
weak
dynamic
weak
? dynamic
strong
dynamic
strong
dynamic
strong
dynamic
weak
Floating point arithmetic No No No Yes Yes (including C99-style extensions) No Yes No No Yes (via %@eval[ ] function) Yes No Yes (via %@eval[ ] function) No No Yes Yes Yes No
Date & time arithmetic No No No ? No No ? No No Yes Yes No Yes No No Yes Yes Yes Yes
Scientific notation No (except for printf %f/%g) No No Yes Yes (including C99-style base16 notation) No Yes No No Yes[5] Yes No No No No Yes Yes Yes No
Binary prefix notation No No No Yes No No No No No ? Yes No ? No No ? ? ? Yes
Hash tables Yes (via associative arrays) No No Yes (via module) Yes (via associative arrays) No Yes No No No Yes No No No No Yes Yes Yes No
Compound Variables No No No Yes (via records or lists) Yes No ? No No No Yes No No ? ? ? ? ? No
Pattern Matching (regular expressions built-in) Yes No Yes Yes Yes No Yes No No Limited support Yes (full regex support)[6] No No No No Yes Yes Yes No
Pattern Matching (globbing) Yes (*, ?, [...]) Yes Yes Yes Yes (*, ?, [...]) Yes Yes (*, ?, [...]) Yes Yes (*, ?) Yes (*, ?, [...]) Yes (*, ?, [...]) Yes (*, ?) Yes (*, ?, [...]) Yes (*, ?) Yes ? Yes ? Yes
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL
Globbing qualifiers (filename generation based on file attributes) No No No No No No Yes No ? ? ? ? ? ? No ? ? ? No
Recursive globbing (generating files from any level of subdirectories) Yes (**/...) No No No Yes (with set -G, no following of symlinks) No Yes (**/... or ***/... to follow symlinks) No No Yes (via FOR /R) ? No Yes (via FOR /R) ? No ? ? ? Yes (via [SUBDIR...] )
Directory stack (pushd/popd) Yes Yes Yes No No ? Yes ? Yes Yes Yes (all location types)[7] No Yes ? ? ? Yes (provided by IPython) ? No
Command history Yes Yes Yes No Yes Yes Yes No Yes (F7) Yes Yes No[8][9] Yes Yes Yes[3] Yes Yes Yes Yes
History completion Yes Yes Yes No Yes ? Yes No Yes (F8) Yes Yes (F8) No[8][9] Yes ? Yes[3] ? Yes (provided by IPython) ? No
Spell checking No No Yes No No No Yes No No No No No No No No No No ? No
Default user prompt[10] bash-<version number>$ % > > $ $ <hostname>% $ <path>> [<path>] PS <path> <path or drive name>> <path>> [<path>] term%, ; bsh % >>> irb(main):001:0> $
Custom command prompt Yes (variable: $PS1) Yes (variable: $prompt Yes (variable: $prompt No Yes (variable: $PS1, and more) Yes (variable: $PS1) Yes (variable: $PS1, and more) Yes (variable: $PS1) Yes (environment variable: %PROMPT%) Yes (environment variable: %PROMPT) Yes (function: prompt) Yes (environment variable: %PROMPT%) Yes (environment variable: %PROMPT) Yes (environment variable: %PROMPT%) Yes (function: prompt, or variable: $prompt) Yes (variable: bsh.prompt, or method: getBshPrompt()) Yes (variable: sys.ps1) ? Yes (SET PROMPT command)
Exception handling Yes (via trap) ? ? ? Yes (via trap) ? Yes Yes (via trap) No No Yes No No No Yes Yes Yes Yes Yes
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL
One-dimensional array variables Yes Yes Yes Yes Yes Yes Yes No No No Yes No No No Yes Yes Yes Yes No
Multi-dimensional array variables No No No Yes Yes (both indexed and associative arrays) No Yes (via associative arrays) No No No Yes No No No Yes Yes Yes Yes No
Array slicing Yes (${var:offset:length} syntax) No No No Yes (${var:offset:length} and [${from}..${to}] syntax) No Yes (${var[from,to]} syntax) No No No Yes No No No Yes ($var(i j k)) No Yes Yes No
Stream redirection Yes (arbitrary fds) Yes (stdin/out/err) Yes (stdin/out/err) Yes Yes (arbitrary fds) Yes (arbitrary fds) Yes (arbitrary fds) Yes (arbitrary fds) Yes Yes (stdin/out/err) Yes Yes (stdin/out only) Yes (stdin/out/err) Yes (stdin/out/err) Yes Yes Yes Yes Yes (sys$input, sys$output assignment)
Aliases Yes Yes Yes Yes (macro and procedure definitions) Yes Yes Yes Yes Yes ("macros", via doskey) Yes Yes No Yes No Yes (functions) ? Yes (functions) Yes Yes
Search and replace on variables Yes (via ${//} syntax) No Yes (via ${:s//} syntax Yes (via string functions and regular expressions) Yes (via ${//} syntax and builtin commands) No Yes (via ${:s//} and ${//} syntax) No Yes (via set %varname:expression syntax) Yes (via %@replace[ ] function) Yes (-replace operator) No Yes (via %@replace[ ] function) No No ? Yes (via string methods and regular expressions) Yes (via string functions and regular expressions) No
Command substitution Yes Yes Yes ? Yes Yes Yes Yes Yes (via FOR /F command) Yes (via FOR /F command) Yes No Yes (via FOR /F command) No Yes ? Yes ? No
Process substitution Yes (if system supports /dev/fd/<n> or named pipes No No ? Yes (if system supports /dev/fd/<n> No Yes No No ? ? No ? No Yes (via: <{cmd} if system supports /dev/fd/<n>) ? ? ? No
Quoting Yes Yes Yes No Yes Yes Yes Yes Limited Yes (Backtick: `) Yes No Yes (Backtick: `) ? Yes ? Yes Yes Yes
Escaping Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (Caret: ^) Yes (Caret: ^) Yes (Backtick: `) No Yes (Ctrl-X: ?) Yes Yes Yes (Backslash: \) Yes (Backslash: \) Yes (Backslash: \) Yes (quotes or string assignment)
Parallel assignment No No No No ? ? ? No No No Yes No No No ? ? Yes Yes No
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL
Subshells Yes Yes Yes ? Yes Yes Yes Yes Yes (Backtick: ` in for /f usebackq) Limited, via %@execstr[ ] and %@exec[ ] Yes No Limited, via %@execstr[ ] and %@exec[ ] ? Yes ? Yes Yes (Backtick: `) Yes (spawn)
Job control Yes Yes Yes Yes Yes Yes Yes Yes No No No[11] No No No Handled by rio ? Yes Yes Yes
Functions Yes No No Yes Yes Yes Yes Yes Yes (via "call :label") Yes Yes No Yes No Yes Yes Yes Yes Yes
Variadic functions Yes No No Yes Yes Yes Yes Yes No No Yes No ? No Yes No Yes Yes No
Default arguments Yes No No No Yes Yes Yes Yes No No Yes No No No Yes No Yes Yes No
Named parameters No No No No Yes (for user-defined "types") No No No No No Yes No ? No ? No Yes Yes No
Lambda functions No No No Yes No No No No No No Yes No No No No No Yes Yes No
eval function Yes Yes Yes Yes Yes Yes Yes Yes No Yes Yes No Yes No Yes Yes Yes Yes No
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL
(De-)Serialization of composite datatypes No No ? No Yes (print -v var, read -C var) No ? No No No Yes No No No ? Yes Yes Yes No
Pseudorandom number generation Yes ($RANDOM) ? ? Yes (random-integer, random-real) Yes ($RANDOM) ? Yes ($RANDOM) ? Yes (%random%) Yes (%@random[ ] function) Yes No Yes (%@random[ ] function) No No Yes Yes Yes No
TCP/UDP connections as streams Yes (client only) No No Yes Yes (and SCTP support, client only) No Yes (client and server but only TCP) No No No Yes No No No No Yes Yes Yes Yes (server TCP only)
Native CIM/WBEM support No No No No No No No No No No Yes No No No No ? ? ? No
Comments Yes (#) Yes (#) Yes (#) Yes (; and #| ... |# for multi-line comments) Yes (#) Yes (#) Yes (#) Yes (#) Yes (rem and unofficially the invalid label ::) Yes (rem and unofficially the invalid label ::) Yes (#) Yes (rem and unofficially the invalid label ::) Yes (rem and unofficially the invalid label ::) Yes (rem and unofficially the invalid label ::) Yes (#) Yes (//) Yes (#) Yes (#) Yes (!)
Here documents Yes Yes Yes Yes Yes Yes Yes Yes No Yes Yes No No No Yes No Equivalent feature ("""string""" syntax) Yes Yes
Lines without $ in COM file
Unicode Yes No Yes ? Yes No Yes No Yes Yes Yes No No No Yes Yes Yes 1.9: Yes
1.8: limited
No
Startup scripts Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes (4start) Yes No [12] Yes (4start) No Yes Yes (.bshrc) Yes ($PYTHONSTARTUP or ipythonrc) Yes (.irbrc) Yes (login.com)
Blocking of unsigned scripts No No No No No No No No No No Yes No No No No No No ? No
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL
Bytecode No No No Yes (compiler is Scheme48 virtual machine, "scshvm") Yes (compiler is called "shcomp") No Yes (built-in command "zcompile") No No No Yes No No No No Yes Yes (standard CPython, IronPython or Jython) Yes (NetRuby, JRuby, version 1.9/YARV) No
available as statically linked, independent single file executable Yes Yes Yes Yes Yes Yes Yes Yes Yes No Yes (requires manual configuration) Yes No ? Yes Yes (bsh.jar) No No No
Platform-independent Yes Yes Yes Yes Yes Yes Yes Yes No No Yes
via PASH
Yes[13] No No Yes Yes Yes Yes No
License GPL BSD BSD BSD-style Common Public License Public Domain BSD-style BSD-style MS-EULA[14] Shareware MS-EULA[15]
or BSD/GPL (PASH)
MS-EULA[16]
or BSD/GPL (free clones)
MIT License, with restrictions IBM-EULA[17] ? LGPL Python Ruby, GPL ?
bash (v4.0) csh tcsh Scsh ksh (ksh93t+) pdksh zsh ash Windows
cmd.exe[1]
4NT Windows PowerShell COMMAND.COM 4DOS OS/2
cmd.exe
rc BeanShell Python shell Ruby shell VMS DCL

[edit] References

  1. ^ a b c d e f g Command extensions enabled, or "cmd /x".
  2. ^ "HP OpenVMS DCL Dictionary". http://h71000.www7.hp.com/doc/732final/9996/9996pro_contents.html. Retrieved on 2009-03-23. 
  3. ^ a b c Handled by rio, GNU readline, editline or vrl
  4. ^ Available in modern versions of ash such as NetBSD's sh or Debian ash
  5. ^ Scientific notation is supported for input only; numeric results are always displayed in common format.
  6. ^ PowerShell leverages the full .NET regular expression engine which features named captures, zero-width lookahead/-behind, greedy/non-greedy, character classes, level counting etc.
  7. ^ PowerShell exposes more than just the file system as a navigable system: Windows Registry, functions, aliases, variables, certificate store, credential store etc. The location types are extensible through a provider architecture. Common commands will work with any compliant provider
  8. ^ a b Added by TSR programs such as DOSKey
  9. ^ a b Available in DR-DOS via the "history" command in config.sys; see this link
  10. ^ Many shells in *nix environments change the root user's prompt to '#'.
  11. ^ Job control will be introduced with PowerShell 2.0. PowerShell 1.0 has no Job control and only limited parallelism
  12. ^ Limited support via AUTOEXEC.BAT.
  13. ^ Refers only to some implementations, such as on DosBox, Wine, and FreeDOS.
  14. ^ Windows component — covered by a valid license for Microsoft Windows
  15. ^ Windows component — covered by a valid license for Microsoft Windows
  16. ^ MS-DOS and Windows component — covered by a valid license for MS-DOS or Microsoft Windows
  17. ^ OS/2 component — covered by a valid license for OS/2

[edit] External links

Personal tools