bash手册翻译#3.1 shell语法

Bash是 Bourne-Again SHell 的首字母缩写。Bourne shell是传统的Unix系统shell,最初为Stephen Bourne编写。所有Bourne shell内建的命令都可以在bash中使用。而赋值以及引用相关的规则来源于专门为标准Unix shell制定的POSIX规范。

这一章将概要归纳shell的构成区块:命令,控制结构,函数,参数,shell扩展,用于指向输入和输出文件的重定向机制,以及shell何如执行命令。

  • Shell语法:你的输入的含义。
  • Shell命令:你允许使用的命令种类。
  • Shell函数:对一组命令进行命名。
  • Shell参数:shell如何存储数值。
  • Shell扩展:Bash如何扩展参数以及可用的扩展。
  • 重定向:一种从哪输入以及往哪输出的控制方法。
  • 执行命令:执行一条命令时到底发生了什么。
  • Shell脚本:执行包含shell命令的文件。

3.1 Shell 语法

  • Shell 操作:shell中基本的操作。
  • 引用:如何去除字符的特殊含义。
  • 注释:如何标记注释。
    当shell读取输入,它会按顺序执行命令。如果输入指示注释,shell就会忽略注释符号(‘#’),以及该行后续的内容。

否则,粗略地说,shell将会读取输入,并将输入分为字和操作符。运用引用规则将各种字和字符选择对应的含义。

shell然后把这些记号解析为命令和其他结构,移除某些字和字符的特殊含义,并扩展其他标记,在需要的情况下重定向输入和输出,执行指定的命令,并等待命令的退出码,并将这些值用于后续的检测和处理。


3.1.1 Shell 操作

下面的步骤简要地描述当shell读取和执行一条命令时,shell对应的操作。基本说来,shell会做如下的操作:
1. 从一个文件中读取输入。file通常作为-c调用选项的参数(参见 Invoking Bash),或者从用户的终端读取。
2. 在Quoting中描述的规则下,把输入分断为字和操作符。这些记好被元字符隔断开。别名这一扩展就是在这一步进行的。
3. 把这些记好解析为简单或者复合命令 。
4. 执行shell的各种扩展功能,将扩展标记分断为文件名列表,以及命令和参数。
5. 执行必要的重定向以及将重定向操作符以及他们的操作数从参数列表中移除。
6. 执行指令
7. 选择性地等待命令完成并收集命令的退出码。


3.1.2 引用

  • Escape Character:如何去除单个字符的特殊含义。
  • 单引用:如何禁止对一个字符序列所有解析。
  • 双引用:如何抑制对一个字符序列的大部分解析。
  • ANSI-C:如何在一个引用的字串中扩展ANSI-C序列。
  • 本地翻译:如何将一个字串翻译为不同的语言。

引用用于将一个字串或者字符的特殊含义去除。引用也可以用于关闭对特殊字符的特殊处理,以避免保留字被正常标记,以及避免被当作参数扩展。

每一种元字符对shell来说都有特殊含义,如果想表示字符本身时,元字符必须被引用。当使用history命令时,命令扩展字符,通常为’!’,必须被引用来避免history扩展。更多细节请参见history expansion。

一共有三种引用机制, 转义字符, 单引用, 以及双引用。


3.1.2.1 转义字符

未被引用的反斜杠’\’就是bash中的转义字符。它将紧接着的除换行符(newline)之外的字符保留其原本含义。如果\newline成对出现,并且这个反斜杠没有被引用,\newline将被当作续行符(也就是说,换行符将从输入流中移除并忽略掉)。

3.1.2.2 单引用

被单引号围起来的字符将被保留其字面的含义。单引号不应该在多个单引号之间出现,就算被转义符转义也不行。


3.1.2.3 双引用

被双引号包含的字符将保留其字面含义,除了一下三个字符:

$ ` \

以及当历时扩展功能开启(history expansion)时的!$和反引号在双引号中有特殊含义(参见Shell Expansions)。而反斜杠在后门跟着如下字符的时候,将保留它的特殊含义:

$ ` " \ newline

当双引号中的当反斜杠后面跟着如上字符时,反斜杠将被移除,反斜杠将转义如上字符的特殊含义。(译者:其实双赢号语法里特殊的字符就是四个,而反斜杠将这四个,包括它自己的进行转义,语法上就能在引号中显示任何字符)。* 和@ 在双引用中也有特殊的含义(Shell Parameter Expansion)。


3.1.2.4 ANSI-C引用

$'string'这种形式表示的标记将被特殊处理,标记将被扩展成string,而且string里被转义的字符将是为ANSI C中的转义字符。如下字符将被解码:
\a,\b,\e,\E,\f,\n,\r,\t,\v,\,\’,\”,\nnn,\xHH,\uHHH,\UHHHHHHHH,\cx。扩展的结果是单引号包含的字串,就像$不存在一样。
(续)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
译者序<br><br>毫无疑问,UNIX/Linux最重要的软件之一就是shell,目前最流行的shell被称为Bash(Bourne Again Shell),几乎所有的Linux和绝大部分的UNIX都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX工作平台上最亲密的朋友,因此,学好shell,是学习Linux/UNIX的的开始,并且它会始终伴随你的工作学习。<br><br>shell是如此地重要,但令人惊奇的是,介绍shell的书没有真正令人满意的。所幸的是,我看到了这本被人称为abs的书,这本书介绍了bash大量的细节和广阔的范围,我遇到的绝大部分的技术问题--无论是我忘记的或是以前没有发现的--都可以在这本书里找到答案。这本使用大量的例子详细地介绍了Bash语法,各种技巧,调试等等的技术,以循序渐进的学习方式,让你了解Bash的所有特性,在书中还有许多练习可以引导你思考,以得到更深入的知识。无论你是新手还是老手,或是使用其他语言的程序员,我能肯定你能在此书用受益。而本书除了介绍BASH的知识之外,也有许多有用的关于Linux/UNIX的知识和其他shell的介绍。<br><br>在看到本书的英文版后,我决定把它翻译出来,在Linuxsir论坛上结识了译者之一杨春敏共同翻译这本书,600多页的书是本大部头的书,我们花了6个月的业余时间才翻译完了。<br><br>关于版权的问题,英文版的作者Mendel Cooper对英文版的版权做了详细的约定,请参考:Appendix Q. Copyright。中文版版权由译者杨春敏和黄毅共同所有,在遵守英文版版权相应条款的条件下,欢迎在保留本书译者名字和版权说明以非盈利的方式自由发布此中文版,以盈利目的的所有行为必须联系英文作者和两位中文译者以获得许可。<br><br>本书得以成稿,我(黄毅)要多谢我的女朋友,本该给予她的时间我用来了翻译,多谢你的理解,你是一个很棒的女朋友!<br><br> 译者 杨春敏 黄毅<br> 2006.5.15<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值