操作系统shell的比较/Comparison of command shells

操作系统shell的比较/Comparison of command shells

  

 下面的比较能可以帮助大家对shell功能和分类有个大致的了解:

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

bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL[2]
Usual environmentPOSIXPOSIXPOSIXPOSIXPOSIXPOSIXPOSIXPOSIXWin32Win32.NETDOSDOSOS/2Plan 9,POSIXJavaPythonRubyOpenVMS
Introduced198719781979199419821989 ?1990198919931993200619801989198719892005199119951977 ?
CompletionYes (extendable)Yes (via the ESC key)Yes (extendable)NoYes (extendable)YesYes (extendable)NoYes (partial)Yes (partial)Yes (extendable)NoYesYesYes[3]YesYes (provided by the rlcompleter module or IPython)YesNo
Pipestext
concurrent
text
concurrent
text
concurrent
texttext
(may contain serialized objects ifprint -C is used)
concurrent
text
concurrent
text
concurrent
text
concurrent
text
concurrent
textobjects
concurrent
text
sequential
temporary files
text
sequential
temporary files
text
concurrent
text
concurrent
not supportedobjects (when using IPython+IPipe)not supportedtext
(via PIPE command)
Integer arithmeticYes (via $(( )), (( )) and let syntax)Yes (via @ syntax)Yes (via @ syntax)YesYes (via $(( )), (( )), let syntax and expr builtin)Yes (via $(( )) syntax)Yes (via $(( )), (( )) and let syntax)Yes [4]Yes (via "set /a")Yes (via %@eval[ ] function)YesNoYes (via %@eval[ ] function)NoNoYesYesYesYes
Typing disciplinedynamic
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 arithmeticNoNoNoYesYes (including C99-style extensions)NoYesNoNoYes (via %@eval[ ] function)YesNoYes (via %@eval[ ] function)NoNoYesYesYesNo
Date & time arithmeticNoNoNo?NoNoNoNoNoYesYesNoYesNoNoYesYesYesYes
Scientific notationNo (except for printf %f/%g)NoNoYesYes (including C99-style base16 notation)NoYesNoNoYes[5]YesNoNoNoNoYesYesYesNo
Binary prefix notationNoNoNoYesNoNoNoNoNo?YesNo?NoNo???Yes
Hash tablesYes (via associative arrays)NoNoYes (via module)Yes (via associative arrays)NoYesNoNoNoYesNoNoNoNoYesYesYesNo
Compound VariablesNoNoNoYes (via records or lists)YesNo?NoNoNoYesNoNo???Yes (via tuples)YesNo
Pattern Matching (regular expressionsbuilt-in)YesNoYesYesYesNoYesNoYes (via the findstr /rcommand)Limited supportYes (full regex support)[6]NoNoNoNoYesYesYesNo
Pattern Matching (globbing)Yes (*, ?, [...])YesYesYesYes (*, ?, [...])YesYes (*, ?, [...])YesYes (*, ?)Yes (*, ?, [...])Yes (*, ?, [...])Yes (*, ?)Yes (*, ?, [...])Yes (*, ?)Yes?YesYes (via Dir.glob() method)Yes
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL
Globbing qualifiers(filename generation based on file attributes)NoNoNoNoNoNoYesNo??????No?Yes (via glob module)?No
Recursive globbing(generating files from any level of subdirectories)Yes (**/...)NoNoNoYes (with set -G, no following of symlinks)NoYes (**/... or***/... to follow symlinks)NoNoYes (via FOR /R)?NoYes (via FOR /R)?No?Yes (via glob module)Yes (via Dir.glob() method)Yes (via [SUBDIR...] )
Directory stack(pushd/popd)YesYesYesNoNo?Yes?YesYesYes (all location types)[7]NoYes???Yes (provided by IPython)Yes (pass a block to Dir.chdir() method)No
Directory History Window(popup)NoNoNoNoNoNoNoNoNoYesYesNoYesNoNoNoNoNoNo
Implicit Directory Change - If command is dir name changes to itNo
complains command is dir
NoNoNoNoNoYes
via setopt AUTOCD
NoNoYesNoNoYesNoNoNoNoNoNo
Command historyYesYesYesNoYesYesYesNoYes (F7)YesYesNo[8][9]YesYesYes[3]YesYesYesYes
History completionYesYesYesNoYes?YesNoYes (F8)YesYes (F8)No[8][9]Yes?Yes[3]?Yes (provided by IPython)Yes (with UtilityBelt gem)No
Spell checkingNoNoexperimentalNoNoNoYesNoNoNoNoNoNoNoNoNoNoNoNo
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 promptYes (variable: $PS1)Yes (variable: $promptYes (variable: $promptNoYes (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)YesYes (SET PROMPT command)
Exception handlingYes (via trap)???Yes (via trap)?YesYes (via trap)NoNoYesNoNoNoYesYesYesYesYes
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL
One-dimensionalarray variablesYesYesYesYesYesYesYesNoNoNoYesNoNoNoYesYesYesYesNo
Multi-dimensional array variablesNoNoNoYesYes (both indexed and associative arrays)NoYes (via associative arrays)NoNoNoYesNoNoNoYesYesYesYesNo
Array slicingYes (${var:offset:length} syntax)NoNoNoYes (${var:offset:length} and [${from}..${to}] syntax)NoYes (${var[from,to]} syntax)NoNoNoYesNoNoNoYes ($var(i j k))NoYesYesNo
StreamredirectionYes (arbitrary fds)Yes (stdin/out/err)Yes (stdin/out/err)YesYes (arbitrary fds)Yes (arbitrary fds)Yes (arbitrary fds)Yes (arbitrary fds)YesYes (stdin/out/err)YesYes (stdin/out only)Yes (stdin/out/err)Yes (stdin/out/err)YesYesYesYesYes (sys$input, sys$output assignment)
AliasesYesYesYesYes (macro and procedure definitions)YesYesYesYesYes ("macros", viadoskey)YesYesNoYesNoYes (functions)?Yes (functions)YesYes
Search and replace on variablesYes (via ${//} syntax)NoYes (via ${:s//} syntaxYes (via string functions and regular expressions)Yes (via ${//} syntax and builtin commands)NoYes (via ${:s//} and ${//} syntax)NoYes (via set %varname:expressionsyntax)Yes (via %@replace[ ] function)Yes (-replace operator)NoYes (via %@replace[ ] function)NoNo?Yes (via string methods and regular expressions)Yes (via string functions and regular expressions)No
Command substitutionYesYesYes?YesYesYesYesYes (via FOR /F command)Yes (via FOR /F command)YesNoYes (via FOR /F command)NoYes?YesYesNo
Process substitutionYes (if system supports /dev/fd/<n>or named pipesNoNo?Yes (if system supports /dev/fd/<n>NoYesNoNo??No?NoYes (via: <{cmd} if system supports /dev/fd/<n>)?Yes (via subprocess module)YesNo
QuotingYesYesYesNoYesYesYesYesYesYes (Backtick: `)YesNoYes (Backtick: `)?Yes?YesYesYes
EscapingYes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (Caret: ^)Yes (Caret: ^)Yes (Backtick: `)NoYes (Ctrl-X: ?)YesYesYes (Backslash: \)Yes (Backslash: \)Yes (Backslash: \)Yes (quotes or string assignment)
Parallel assignmentNoNoNoNo???NoNoNoYesNoNoNo??YesYesNo
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL
SubshellsYesYesYes?YesYesYesYesYes (Backtick: ` in for /f usebackq)Limited, via %@execstr[ ] and %@exec[ ]YesNoLimited, via %@execstr[ ] and %@exec[ ]?Yes?YesYes (Backtick: `)Yes (spawn)
Job controlYesYesYesYesYesYesYesYesNoNoYesNoNoNoHandled byrio?YesYesYes
FunctionsYesNoNoYesYesYesYesYesYes (via "call :label")YesYesNoYesNoYesYesYesYesYes
Variadic functionsYesNoNoYesYesYesYesYesNoNoYesNo?NoYesNoYesYesNo
Default argumentsYesNoNoNoYesYesYesYesNoNoYesNoNoNoYesNoYesYesNo
Named parametersNoNoNoNoYes (for user-defined "types")NoNoNoNoNoYesNo?No?NoYesYesNo
Lambda functionsNoNoNoYesNoNoNoNoNoNoYesNoNoNoNoNo(lambdas can't have control structures)YesNo
eval functionYesYesYesYesYesYesYesYesNoYesYesNoYesNoYesYesYesYesNo
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL
(De-)Serializationof composite datatypesNoNo?NoYes (print -v var, read -C var)No?NoNoNoYesNoNoNo?YesYesYesNo
Pseudorandom number generationYes ($RANDOM)??Yes (random-integer, random-real)Yes ($RANDOM)?Yes ($RANDOM)?Yes (%random%)Yes (%@random[ ] function)YesNoYes (%@random[ ] function)NoNoYesYesYesNo
TCP/UDPconnections as streamsYes (client only)NoNoYesYes (and SCTP support, client only)NoYes (client and server but only TCP)NoNoNoYesNoNoNoNoYesYesYesYes (server TCP only)
Native CIM/WBEMsupportNoNoNoNoNoNoNoNoNoNoYesNoNoNoNo???No
CommentsYes (#)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 (#); and <# ... #> for multi-line commentsYes (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 documentsYesYesYesYesYesYesYesYesNoYesYesNoNoNoYesNoEquivalent feature ("""string"""syntax)YesYes
Lines without $ in COM file
UnicodeYesNoYes?YesNoYesNoYesYesYesNoNoNoYesYesYes1.9: Yes
1.8: limited
No
Startup scriptsYesYesYesYesYesYesYesYesYesYes (4start)YesNo [11]Yes (4start)NoYesYes (.bshrc)Yes ($PYTHONSTARTUP or ipythonrc)Yes (.irbrc)Yes (login.com)
Blocking of unsigned scriptsNoNoNoNoNoNoNoNoNoNoYesNoNoNoNoNoNoNoNo
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL
BytecodeNoNoNoYes (compiler is Scheme48 virtual machine, "scshvm")Yes (compiler is called "shcomp")NoYes (built-in command "zcompile")NoNoNoYes, automaticNoNoNoNoYesYes (standardCPython,IronPython orJython)Yes (NetRuby,JRubyversion 1.9/YARV)No
available as statically linked, independent single file executableYesYesYesYesYesYesYesYesYesNoNoYesNo?YesYes (bsh.jar)Yes on Windows via py2exeNoNo
Platform-independentYesYesYesYesYesYesYesYesNoNoYes
via PASH
Yes[12]NoNoYesYesYesYesNo
LicenseGPLBSDBSDBSD-styleCommon Public LicensePublic DomainBSD-styleBSD-styleMS-EULA[13]SharewareMS-EULA[14]
or BSD/GPL(PASH)
MS-EULA[15]
or BSD/GPL (free clones)
MIT License, with restrictionsIBM-EULA[16]Lucent Public LicenseLGPLPythonRuby, GPL?
bash (v4.0)cshtcshScshksh (ksh93t+)pdkshzshashWindows
cmd.exe[1]
4NTWindows PowerShellCOMMAND.COM4DOSOS/2
cmd.exe
rcBeanShellPython shellRuby shellVMS DCL

[edit]

 copy from:http://en.wikipedia.org/wiki/Comparison_of_computer_shells#cite_note-cmd_.2Fx-0 

posted @ 2010-01-23 16:33  Zhongjian Zhang  阅读(259)  评论(0编辑  收藏  举报