csh,tcsh,bash,sh等shell的区别

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

出自bash的faq,仔细看看。顺便翻译学习一下。

复制代码

代码如下:

Section C: Differences from other Unix shells

C:跟其他UNIX shells脚本的区别

C1) How does bash differ from sh, the Bourne shell?

C1) bash和 sh、Bourne shell的区别

This is a non-comprehensive list of features that differentiate bash

from the SVR4.2 shell.  The bash manual page explains these more

completely.

这时一个不全面的bash和SVR4.2 shell特性区别的列表,bash手册解释的更详细

Things bash has that sh does not:

bash特有的功能:

        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

         time保留字测试管道或内建命令耗时情况

        the `function reserved word

the `select compound command and reserved word

        select复合命令和保留字

arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done

        算术命令:for ((expr1 ; expr2; expr3 )); do list; done

        new $… and $”…” quoting

        新的引用方法$…  $”…”

the $(…) form of command substitution

        $(…) 命令替代用法

        the $(

                $(cat filename)

        $(

the ${#param} parameter value length operator

        ${#param} 测试参数param的值的长度

        the ${!param} indirect parameter expansion operator

${!param} 间接参数扩展操作

        the ${!param*} prefix expansion operator

        ${!param*} 前缀扩展操作

the ${param:offset[]} parameter substring operator

       ${param:ffset[]}参数通过偏移量截取子串操作

the ${param/pat[/string]} parameter pattern substitution operator

        ${param/pat[/string]} 参数模式替换的操作

expansions to perform substring removal (${p%[%]w}, ${p#[#]w})

         扩展子串删除命令:(${p%[%]w}, ${p#[#]w})

        expansion of positional parameters beyond $9 with ${num}

扩展了为止参数超过9的限制

        variables: BASH, 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

        上边一堆的环境变量

        DEBUG trap

        ERR trap

        调试和错误陷阱

        variable arrays with new compound assignment syntax

数组和复合赋值运算符的语法规则

        redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-

重定向规则: <>, &>, >|, <<<, [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 `.

        bash返回内建命令 将退出一个.文件源

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,

                  readonly -a/-f/name=value, trap -l, set +o,

                  set -b/-m/-o option/-h/-p/-B/-C/-H/-P,

unset -f/-v, ulimit -m/-p/-u,

                  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 reads这样写交互脚本,环境变量非交互的。

        bash restricted shell mode is more extensive

        bash更广泛的受限模式

bash allows functions and variables with the same name

        允许函数名变量名一样

        brace expansion

        括号扩展

        tilde expansion

        ~波浪号扩展

arithmetic expansion with $((…)) and `let builtin

        算术扩展:$((…)) 和let命令

        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

         上边一堆新的bash内建命令。

        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

        POSIX.2风格的通配符类、等价类、通配符号

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

        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

        调试支持,包括caller内建命令和新变量

RETURN trap

Things sh has that bash does not:

下边是sh有但是bash木有的

        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, priv

Implementation 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 fails

下边都和上边比较雷同了。。。大致浏览吧。

C2) 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[]} parameter substring operator

the ${param/pat[/string]} parameter pattern substitution operator

        variables: BASH, BASH_VERSION, BASH_VERSINFO, 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 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, 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 -u, umask -S, alias -p, shopt,

disown, printf, complete, compgen

        `! 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

Things ksh88 has or uses that bash does not:

tracked aliases (alias -t)

        variables: ERRNO, FPATH, EDITOR, VISUAL

        co-processes (|&, >&p, <&p)

        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/-l/-u/-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 shell

Implementation 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 bindings

C3) Which new features in ksh-93 are not in bash, and which are?

New things in ksh-93 not in bash-3.0:

        associative arrays

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

        `sleep and `getconf builtins (bash has loadable versions)

typeset -n and `nameref variables

        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

        print -f (bash uses printf)

        `fc has been renamed to `hist

`. can execute shell functions

        exit statuses between 0 and 255

        `+= variable assignment operator

FPATH and PATH mixing

        getopts -a

        -I invocation option

        printf %H, %P, %T, %Z modifiers, output base for %d

lexical scoping for local variables in `ksh functions

        no scoping for local variables in `POSIX functions

New things in ksh-93 present in bash-3.0:

[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[]}, ${param/pat[/str]},

                    ${!param*}

compound array assignment

        the `! reserved word

loadable builtins — but ksh uses `builtin while bash uses `enable

        `command, `builtin, `disown builtins

        new $… and $”…” quoting

FIGNORE (but bash uses GLOBIGNORE), HISTCMD

        set -o notify/-C

        changes to kill builtin

        read -A (bash uses read -a)

        read -t/-d

        trap -p

exec -c/-a

        `. restores the positional parameters when it completes

        POSIX.2 `test

        umask -S

        unalias -a

command and arithmetic substitution performed on PS1, PS4, and ENV

        command name completion

ENV processed only for interactive shells

        set -o pipefail

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容