This article catalogs comparable aspects of notable operating system shells.

General characteristics

Shell License Mouse support Unicodesupport ISO 8601support Stream redirection Configurability Startup/shutdownscripts Logging Thompson shellUNIXsh1971UNIXUNIXText-based CLIBourne shell 1977 version7th Ed. UNIXsh19777th Ed. UNIX7th Ed. UNIX,Text-based CLIBourne shell current versionVarious UNIXsh1977SunOS-5.x, FreeBSDSunOS-5.xText-based CLISince mid 1990s.if compiled with -DACCT.POSIX shellPOSIXsh1992As part of IEEE Std.1003.2-1992 (POSIX.2); integrated into IEEE Std.1003.1 with the 2001 revision.POSIXText-based CLI( given as an example)bash (v4)POSIXbash, sh1989GNU, Linux (default for root), macOS 10.3–10.14GNU, Linux, Haiku, macOS 10.3–10.14Text-based CLI, "Bash now supports the \u and \U Unicode escape."cshPOSIXcsh1978SunOSText-based CLItcshPOSIXtcsh, csh1983FreeBSD (former default for root), formerly Mac OS XText-based CLIHamilton C shellWin32, OS/2csh1988Text-based CLIScshPOSIXscsh1994ksh (ksh93t+)POSIXksh1983AIX, HP-UXOpenSolarisText-based CLIpdkshPOSIXksh, sh1989?OpenBSDDefault shell in OpenBSD is ksh (pdksh).OpenBSDText-based CLIzshPOSIXzsh1990Deepin, GoboLinux, Grml, macOS 10.15+, Kali 2020.4+, GhostBSD 26.1-R15.0p2+Grml, macOS 10.15+Text-based CLIashPOSIXsh1989Minix, BusyBox based systemsNetBSD, Minix, BusyBox based systemsText-based CLICCPCP/M, MP/M(CCP)1976 (1974)CP/M (no login), MP/MCP/M, MP/M (originally closed-source)Text-based CLI (automatic via )COMMAND.COMDOSCOMMAND1980DOS, Windows 95, 98, SE, MEDOS, Windows 95, 98, SE, MEvendor specific, f.e. MS-EULA,MS-DOS and Windows component – covered by a valid license for MS-DOS or Microsoft Windows. or BSD/GPL (free clones) (except for OpenDOS, DR-DOS, PTS/DOS and FreeDOS)Text-based CLI (except for DR-DOS) (via or ) (via startup parameters and environment variables, DR-DOS also supports user-default switch command) (automatic for primary shell, or explicitly via , or startup options) (via command or and startup options)OS/2 CMD.EXEOS/2, eComStation, ArcaOSCMD1987OS/2, eComStation, ArcaOSOS/2, eComStation, ArcaOSOS/2 component – covered by a valid license for OS/2.Text-based CLI (only via startup option) (via command or and startup options)Windows CMD.EXECommand extensions enabled, or "CMD /X".Win32CMD1993Windows NT, 2000, XP, Server 2003, VistaWindows NT, 2000, XP, Server 2003, VistaWindows component – covered by a valid license for Microsoft Windows.Text-based CLI ( for UTF-8, but program arguments are still encoded in local codepage) (via registry, startup parameters, and environment variables) (automatic via registry, or explicitly via startup option) (via command or and startup options)4DOS, NDOSDOS, Windows 95, 98, SE, ME4DOS, NDOS1989 (1986)Text-based CLI with TUI extensions (popups, help system, internal variable, command) (via , except for , , , , , , , commands and file / directory coloring) (via / file, startup parameters, environment variables, command) (automatic for primary shell and / as well as / for any shell, or explicitly via , or startup options) (via command or and startup options)4OS2OS/2, eComStation, ArcaOS4OS21992 (but bundled with ArcaOS)Text-based CLI (via file, startup parameters, environment variables, command) (automatic via / as well as / files, or explicitly via option) (via command or and startup options)TCC(formerly 4NT)Win32TCC1993optionaloptionalText-based CLI (Take Command: GUI)VMS DCLOpenVMS1977VMSVMSProprietary, bundled in VMSText-based CLIPowerShell.NET,.NET FrameworkPowerShell2006Windows 10, 8, Server 2008, 7Microsoft PowerShell is installed by default on Windows 7 and later. It is an optional download for users of Windows Vista or Windows XP.Windows 10, 8, Server 2008, 7Graphical CLIrcPlan 9, POSIXrc1989Plan 9, Version 10 UnixPlan 9, Version 10 UnixText-based CLIBeanShellJava2005fishPOSIXfish2005GhostBSDText-based CLIIonRedox, Linuxion2015RedoxRedoxText-based CLI (not distributed as a standalone executable, but it can be built as one)

Interactive features

Shell Thompson shell??Bourne shell 1977 version??Bourne shell current versioncurrent versions from Jörg Schilling. (CDPATH, pushd, popd, dirs), CDPATH since SVr4POSIX shellbash (v4.0)Alt-Shift-8 or Alt-* will expand to the full matching list of filenames.cshtcshHamilton C shellScsh??ksh (ksh93t+)pdkshzshThis applies only on reserved words and other syntactic features.zsh does not feature syntax highlighting, but a 3rd party project exists which offers this capability as an add-on: zsh-syntax-highlightingashCCPCOMMAND.COMAvailable through the add-on.Available in DR-DOS through . (only in DR-DOS through %$ON%, %$OFF%, %$HEADER%, %$FOOTER%) (only single-stepping with COMMAND /Y) (only via external command, in DR-DOS also via  / internal commands)OS/2CMD.EXEWindowsCMD.EXE (via command)4DOSAlternatively available through the add-on as well.Alternatively available in DR-DOS through as well. (via , and commands) (via function, and indirectly via a combination of , , commands)4OS2???????TCC (formerly 4NT) (via , , and commands) (via function, and indirectly via a combination of , , commands)TCC has special prompt functions for Yes, No, Cancel, Close, Retry.PowerShellYes, in PSReadLine moduleYes, in ISEYes, in ISEThe $host.ui.PromptForChoice function allows for a menu-style prompt for choices. The prompt works from background jobs as well as from remote sessions, displaying the menu prompt on the console of the controlling session.The cmdlet writes a progress bar which can indicate percentage, remaining seconds etc. The progress bar messages work from background jobs or remote sessions in addition to interactive scripts, i.e. the progress bar is displayed on the console of the controlling session, not as part of the regular output., in ISEThe cmdlet inspects the command definition and opens an interactive windows with a named input field for each parameter/switchrcHandled by rio, GNU readline, editline or vrl.??BeanShell??VMS DCL??fishThe fish shell is an interactive character based input/output surface.

Background execution Background execution allows a shell to run a command without user interaction in the terminal, freeing the command line for additional work with the shell. POSIX shells and other Unix shells allow background execution by using the & character at the end of command.

Completions

Completion features assist the user in typing commands at the command line, by looking for and suggesting matching words for incomplete ones. Completion is generally requested by pressing the completion key (often the key).

Command name completion is the completion of the name of a command. In most shells, a command can be a program in the command path (usually $PATH), a builtin command, a function or alias.

Path completion is the completion of the path to a file, relative or absolute.

Wildcard completion is a generalization of path completion, where an expression matches any number of files, using any supported syntax for file matching.

Variable completion is the completion of the name of a variable name (environment variable or shell variable). Bash, zsh, and fish have completion for all variable names. PowerShell has completions for environment variable names, shell variable names and — from within user-defined functions — parameter names.

Command argument completion is the completion of a specific command's arguments. There are two types of arguments, named and positional: Named arguments, often called options, are identified by their name or letter preceding a value, whereas positional arguments consist only of the value. Some shells allow completion of argument names, but few support completing values.

Bash, zsh and fish offer parameter name completion through a definition external to the command, distributed in a separate completion definition file. For command parameter name/value completions, these shells assume path/filename completion if no completion is defined for the command. Completion can be set up to dynamically suggest completions by calling a shell function. The fish shell additionally supports parsing of man pages to extract parameter information that can be used to improve completions/suggestions. In PowerShell, all types of commands (cmdlets, functions, script files) inherently expose data about the names, types and valid value ranges/lists for each argument. This metadata is used by PowerShell to automatically support argument name and value completion for built-in commands/functions, user-defined commands/functions as well as for script files. Individual cmdlets can also define dynamic completion of argument values where the completion values are computed dynamically on the running system.

Command history

Users of a shell may find themselves typing something similar to what they have typed before. Support for command history means that a user can recall a previous command into the command-line editor and edit it before issuing the potentially modified command.

Shells that support completion may also be able to directly complete the command from the command history given a partial/initial part of the previous command.

Most modern shells support command history. Shells which support command history in general also support completion from history rather than just recalling commands from the history. In addition to the plain command text, PowerShell also records execution start- and end time and execution status in the command history.

Mandatory argument prompt

Mandatory arguments/parameters are arguments/parameters which must be assigned a value upon invocation of the command, function or script file. A shell that can determine ahead of invocation that there are missing mandatory values, can assist the interactive user by prompting for those values instead of letting the command fail. Having the shell prompt for missing values will allow the author of a script, command or function to mark a parameter as mandatory instead of creating script code to either prompt for the missing values (after determining that it is being run interactively) or fail with a message.

Automatic suggestions

Shells featuring automatic suggestions display optional command-line completions as the user types. The PowerShell and fish shells natively support this feature; pressing the key inserts the completion.

Implementations of this feature can differ between shells; for example, PowerShell and zsh use an external module to provide completions, and fish derives its completions from the user's command history.

Directory history, stack or similar features

Shells may record a history of directories the user has been in and allow for fast switching to any recorded location. This is referred to as a "directory stack". The concept had been realized as early as 1978 in the release of the C shell (csh).

Command line interpreters 4DOS and its graphical successor Take Command Console also feature a directory stack.

Implicit directory change A directory name can be used directly as a command which implicitly changes the current location to the directory.

This must be distinguished from an unrelated load drive feature supported by Concurrent DOS, Multiuser DOS, System Manager and REAL/32, where the drive letter L: will be implicitly updated to point to the load path of a loaded application, thereby allowing applications to refer to files residing in their load directory under a standardized drive letter instead of under an absolute path.

Autocorrection

When a command line does not match a command or arguments directly, spell checking can automatically correct common typing mistakes (such as case sensitivity, missing letters). There are two approaches to this; the shell can either suggest probable corrections upon command invocation, or this can happen earlier as part of a completion or autosuggestion.

The tcsh and zsh shells feature optional spell checking/correction, upon command invocation.