码迷,mamicode.com
首页 > 系统相关 > 详细

从 shell 眼中看世界

时间:2017-09-02 17:01:30      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:标准输出   工作量   less   位置   查看   选项   讲解   命令   先后   

(字符) 展开
每一次你输入一个命令,然后按下 enter 键,在 bash 执行你的命令之前, bash 会对输入的
字符完成几个步骤处理。我们已经知道两三个案例,怎样一个简单的字符序列,例如 “*”,
shell 来说,有很多的涵义。使这个发生的过程叫做(字符)展开。通过展开,你输入的字符,
shell 对它起作用之前,会展开成为别的字符。为了说明我们所要表达的意思,让我们看一
echo 命令。echo 是一个 shell 内部命令,来完成非常简单的认为。它在标准输出中打印出它
的文本参数。

技术分享

那么刚才发生了什么事情呢?为什么 echo 不打印 “*” 呢?随着你回想起我们所学过的关于
通配符的内容,这个 “*” 字符意味着匹配文件名中的任意字符,但是在原先的讨论中我们却不
知道 shell 是怎样实现这个功能的。最简单的答案就是 shell “*” 展开成了另外的东西(在这
种情况下,就是在当前工作目录下的文件名字),在 echo 命令被执行前。当回车键被按下时,
shell 在命令被执行前在命令行上自动展开任何符合条件的字符,所以 echo 命令从不会发现
“*”, 只把它展开成结果。知道了这个以后,我们能看到 echo 执行的结果和我们想象的一样。

路径名展开
这种通配符工作机制叫做路径名展开。如果我们试一下在之前的章节中使用的技巧,我们
会看到它们真是要展开的字符。给出一个主目录,它看起来像这样:
技术分享

技术分享

查看主目录之外的目录:

技术分享

隐藏文件路径名展开
正如我们知道的,以圆点字符开头的文件名是隐藏文件。路径名展开也尊重这
种行为。像这样的展开:
echo *
不会显示隐藏文件
要是展开模式以一个圆点开头,我们就能够在展开模式中包含隐藏文件,而且
隐藏文件可能会出现在第一位置,就像这样:
echo .*
它几乎是起作用了。然而,如果我们仔细检查一下输出结果,我们会看到名字
“.” “..” 也出现在结果中。因为这些名字是指当前工作目录和它的父目录,使用这
种模式可能会产生不正确的结果。我们能看到这样的结果,如果我们试一下这个命
令:
ls -d .* | less
为了在这种情况下正确地完成路径名展开,我们应该雇佣一个更精确些的模式。
这个模式会正确地工作:
ls -d .[!.]?*
这种模式展开成为文件名,每个文件名以圆点开头,第二个字符不包含圆点,
再包含至少一个字符,并且这个字符之后紧接着任意多个字符。这将列出大多数的
隐藏文件(但仍将不能包含以多个圆点开头的文件名)这个带有 -A 选项(“几乎所
有”)的 ls 命令能够提供一份正确的隐藏文件清单:
ls -A

正则表达式的东西在之后的随笔讲解。

波浪线展开
可能你从我们对 cd 命令的介绍中回想起来,波浪线字符 (“”) 有特殊的意思。当它用在一
个单词的开头时,它会展开成指定用户的主目录名,如果没有指定用户名,则是当前用户的主
目录:
技术分享

算术表达式展开
shell 允许算术表达式通过展开来执行。这允许我们把 shell 提示当作计算器来使用:

技术分享

(以上括号中的)表达式是指算术表达式,它由数值和算术操作符组成。
算术表达式只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作。这里是
一些它支持的操作符:

技术分享

技术分享

技术分享

 

 花括号展开
可能最奇怪的展开是花括号展开。通过它,你可以从一个包含花括号的模式中创建多个文
本字符串。这是一个例子:

 技术分享

花括号展开模式可能包含一个开头部分叫做报头,一个结尾部分叫做附言。花括号表达式
本身可能包含一个由逗号分开的字符串列表,或者一系列整数,或者单个的字符串。这种模式
可能不包括嵌入的空白。这个例题使用了一系列整数:

技术分享

那么这对什么有好处呢?最普遍的应用是,创建一系列的文件或目录列表。例如,如果我
们是摄影师,有大量的相片。我们想把这些相片按年月先后组织起来。首先,我们要创建一系
列以数值 年-月形式命名的目录。通过这种方式,目录名按照年代顺序排列。我们可以键
入整个目录列表,但是工作量太大了,并且易于出错。反而,我们可以这样做:

技术分享

 

 

 

从 shell 眼中看世界

标签:标准输出   工作量   less   位置   查看   选项   讲解   命令   先后   

原文地址:http://www.cnblogs.com/yangguang-it/p/7466918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!