📄 faq
字号:
Bash-2.01 contained only a few new features:new `GROUPS' builtin array variable containing the user's group listnew bindable readline commands: history-and-alias-expand-line and alias-expand-lineBash-2.0 contained extensive changes and new features from bash-1.14.7.Here's a short list:new `time' reserved word to time pipelines, shell builtins, and shell functionsone-dimensional arrays with a new compound assignment statement, appropriate expansion constructs and modifications to some of the builtins (read, declare, etc.) to use themnew quoting syntaxes for ANSI-C string expansion and locale-specific string translationnew expansions to do substring extraction, pattern replacement, and indirect variable expansionnew builtins: `disown' and `shopt'new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE, MACHTYPE, BASH_VERSINFOspecial handling of many unused or redundant variables removed (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)dynamic loading of new builtin commands; many loadable examples providednew prompt expansions: \a, \e, \n, \H, \T, \@, \v, \Vhistory and aliases available in shell scriptsnew readline variables: enable-keypad, mark-directories, input-meta, visible-stats, disable-completion, comment-beginnew readline commands to manipulate the mark and operate on the regionnew readline emacs mode commands and bindings for ksh-88 compatibilityupdated and extended builtinsnew DEBUG trapexpanded (and now documented) restricted shell modeimplementation stuff: autoconf-based configurationnearly all of the bugs reported since version 1.14 have been fixedmost builtins converted to use builtin `getopt' for consistencymost builtins use -p option to display output in a reusable form (for consistency)grammar tighter and smaller (66 reduce-reduce conflicts gone)lots of code now smaller and fastertest suite greatly expandedB2) Are there any user-visible incompatibilities between bash-4.2 and previous bash versions?There are a few incompatibilities between version 4.2 and previousversions. They are detailed in the file COMPAT in the bash distribution.That file is not meant to be all-encompassing; send mail tobash-maintainers@gnu.org (or bug-bash@gnu.org if you would likecommunity discussion) if you find something that's not mentioned there.Section C: Differences from other Unix shellsC1) How does bash differ from sh, the Bourne shell?This is a non-comprehensive list of features that differentiate bashfrom the SVR4.2 shell. The bash manual page explains these morecompletely.Things bash has that sh does not: long invocation options [+-]O invocation option -l invocation option `!' reserved word to invert pipeline return value `time' reserved word to time pipelines and shell builtins the `function' reserved word the `select' compound command and reserved word arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done new $'...' and $"..." quoting the $(...) form of command substitution the $(<filename) form of command substitution, equivalent to $(cat filename) the ${#param} parameter value length operator the ${!param} indirect parameter expansion operator the ${!param*} prefix expansion operator the ${param:offset[:length]} parameter substring operator the ${param/pat[/string]} parameter pattern substitution operator expansions to perform substring removal (${p%[%]w}, ${p#[#]w}) expansion of positional parameters beyond $9 with ${num} variables: BASH, BASHPID, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY, TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS, LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME, ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE, HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS, PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars, auto_resume, PROMPT_DIRTRIM, BASHOPTS, BASH_XTRACEFD DEBUG trap ERR trap variable arrays with new compound assignment syntax redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-, >>& prompt string special char translation and variable expansion auto-export of variables in initial environment command search finds functions before builtins bash return builtin will exit a file sourced with `.' builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t. export -n/-f/-p/name=value, pwd -L/-P, read -e/-p/-a/-t/-n/-d/-s/-u/-i/-N, readonly -a/-f/name=value, trap -l, set +o, set -b/-m/-o option/-h/-p/-B/-C/-H/-P, unset -f/-v, ulimit -i/-m/-p/-q/-u/-x, type -a/-p/-t/-f/-P, suspend -f, kill -n, test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S bash reads ~/.bashrc for interactive shells, $ENV for non-interactive bash restricted shell mode is more extensive bash allows functions and variables with the same name brace expansion tilde expansion arithmetic expansion with $((...)) and `let' builtin the `[[...]]' extended conditional command process substitution aliases and alias/unalias builtins local variables in functions and `local' builtin readline and command-line editing with programmable completion command history and history/fc builtins csh-like history expansion other new bash builtins: bind, command, compgen, complete, builtin, declare/typeset, dirs, enable, fc, help, history, logout, popd, pushd, disown, shopt, printf, compopt, mapfile exported functions filename generation when using output redirection (command >a*) POSIX.2-style globbing character classes POSIX.2-style globbing equivalence classes POSIX.2-style globbing collating symbols egrep-like extended pattern matching operators case-insensitive pattern matching and globbing variable assignments preceding commands affect only that command, even for builtins and functions posix mode and strict posix conformance redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr, /dev/tcp/host/port, /dev/udp/host/port debugger support, including `caller' builtin and new variables RETURN trap the `+=' assignment operator autocd shell option and behavior command-not-found hook with command_not_found_handle shell function globstar shell option and `**' globbing behavior |& synonym for `2>&1 |' ;& and ;;& case action list terminators case-modifying word expansions and variable attributes associative arrays coprocesses using the `coproc' reserved word and variables shell assignment of a file descriptor used in a redirection to a variableThings sh has that bash does not: uses variable SHACCT to do shell accounting includes `stop' builtin (bash can use alias stop='kill -s STOP') `newgrp' builtin turns on job control if called as `jsh' $TIMEOUT (like bash $TMOUT) `^' is a synonym for `|' new SVR4.2 sh builtins: mldmode, privImplementation differences: redirection to/from compound commands causes sh to create a subshell bash does not allow unbalanced quotes; sh silently inserts them at EOF bash does not mess with signal 11 sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100 bash splits only the results of expansions on IFS, using POSIX.2 field splitting rules; sh splits all words on IFS sh does not allow MAILCHECK to be unset (?) sh does not allow traps on SIGALRM or SIGCHLD bash allows multiple option arguments when invoked (e.g. -x -v); sh allows only a single option argument (`sh -x -v' attempts to open a file named `-v', and, on SunOS 4.1.4, dumps core. On Solaris 2.4 and earlier versions, sh goes into an infinite loop.) sh exits a script if any builtin fails; bash exits only if one of the POSIX.2 `special' builtins failsC2) How does bash differ from the Korn shell, version ksh88?Things bash has or uses that ksh88 does not: long invocation options [-+]O invocation option -l invocation option `!' reserved word arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done arithmetic in largest machine-supported size (intmax_t) posix mode and posix conformance command hashing tilde expansion for assignment statements that look like $PATH process substitution with named pipes if /dev/fd is not available the ${!param} indirect parameter expansion operator the ${!param*} prefix expansion operator the ${param:offset[:length]} parameter substring operator the ${param/pat[/string]} parameter pattern substitution operator variables: BASH, BASH_VERSION, BASH_VERSINFO, BASHPID, UID, EUID, SHLVL, TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND, IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK, PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE, GROUPS, FUNCNAME, histchars, auto_resume, PROMPT_DIRTRIM prompt expansion with backslash escapes and command substitution redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-, >>& more extensive and extensible editing and programmable completion builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable, exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history, jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd, read -e/-p/-a/-t/-n/-d/-s/-N, readonly -a/-n/-f/-p, set -o braceexpand/-o histexpand/-o interactive-comments/ -o notify/-o physical/-o posix/-o hashall/-o onecmd/ -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type, typeset -a/-F/-p, ulimit -i/-q/-u/-x, umask -S, alias -p, shopt, disown, printf, complete, compgen, compopt, mapfile `!' csh-style history expansion POSIX.2-style globbing character classes POSIX.2-style globbing equivalence classes POSIX.2-style globbing collating symbols egrep-like extended pattern matching operators case-insensitive pattern matching and globbing `**' arithmetic operator to do exponentiation redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr arrays of unlimited size TMOUT is default timeout for `read' and `select' debugger support, including the `caller' builtin RETURN trap Timestamps in history entries {x..y} brace expansion The `+=' assignment operator autocd shell option and behavior command-not-found hook with command_not_found_handle shell function globstar shell option and `**' globbing behavior |& synonym for `2>&1 |' ;& and ;;& case action list terminators case-modifying word expansions and variable attributes associative arrays coprocesses using the `coproc' reserved word and variables shell assignment of a file descriptor used in a redirection to a variableThings ksh88 has or uses that bash does not: tracked aliases (alias -t) variables: ERRNO, FPATH, EDITOR, VISUAL co-processes (bash uses different syntax) weirdly-scoped functions typeset +f to list all function names without definitions text of command history kept in a file, not memory builtins: alias -x, cd old new, newgrp, print, read -p/-s/var?prompt, set -A/-o gmacs/ -o bgnice/-o markdirs/-o trackall/-o viraw/-s, typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-t, whence using environment to pass attributes of exported variables arithmetic evaluation done on arguments to some builtins reads .profile from $PWD when invoked as login shellImplementation differences: ksh runs last command of a pipeline in parent shell context bash has brace expansion by default (ksh88 compile-time option) bash has fixed startup file for all interactive shells; ksh reads $ENV bash has exported functions bash command search finds functions before builtins bash waits for all commands in pipeline to exit before returning status emacs-mode editing has some slightly different key bindingsC3) Which new features in ksh-93 are not in bash, and which are?This list is current through ksh93t+ (05/05/2009)New things in ksh-93 not in bash-4.2: floating point arithmetic and variables math library functions ${!name[sub]} name of subscript for associative array `.' is allowed in variable names to create a hierarchical namespace more extensive compound assignment syntax discipline functions KEYBD trap variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version, .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT backreferences in pattern matching (\N) `&' operator in pattern lists for matching (match all instead of any) exit statuses between 0 and 255 FPATH and PATH mixing lexical scoping for local variables in `ksh' functions no scoping for local variables in `POSIX' functions $'' \C[.collating-element.] escape sequence -C/-I invocation options print -f (bash uses printf) `fc' has been renamed to `hist' `.' can execute shell functions getopts -a printf %B, %H, %P, %R, %Z modifiers, output base for %d, `=' flag read -n/-N differ/-v set -o showme/-o multiline (bash default) `sleep' and `getconf' builtins (bash has loadable versions) typeset -n and `nameref' variables [[ -R name ]] (checks whether or not name is a nameref) typeset -C/-S/-T/-X/-h/-s experimental `type' definitions (a la typedef) using typeset array expansions ${array[sub1..sub2]} and ${!array[sub1..sub2]} associative array assignments using `;' as element separator command substitution $(n<#) expands to current byte offset for fd N new '${ ' form of command substitution, executed in current shell new >;/<>;/<#pat/<##pat/<#/># redirections brace expansion printf-like formats New things in ksh-93 present in bash-4.2: associative arrays [n]<&word- and [n]>&word- redirections (combination dup and close) for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command ?:, ++, --, `expr1 , expr2' arithmetic operators expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]}, ${!param*} compound array assignment negative subscripts for indexed array variables the `!' reserved word loadable builtins -- but ksh uses `builtin' while bash uses `enable'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -