从shell角度看世界

每当输入一个命令按下enter键后,bash在执行命令之前会对输入的字符完成几个步骤处理。
如echo是shell的一个内部命令,功能是打印出文本参数,传递到echo命令的每个参数都会被显示出来。
6016@go:~$ echo i am a girl
i am a girl
但是echo不会打印,原因为匹配文件中的任意字符,shell把*展开成当前的工作目录。
6016@go:~$ echo *
1428406016石蕾report003.pdf bin foo.txt ls-output.txt scripts work xx

众所周知,以圆点字符开头的文件名是隐藏文件,路径名展开也遵守这种原则,
6016@go:~$ echo *
1428406016石蕾report003.pdf bin foo.txt ls-output.txt scripts work xx
6016@go:~$ echo .*
. .. .bash_history .bash_logout .bashrc .cache .dbus .profile .ssh .ttt.swp .vim .viminfo .Xauthority
要是展开模式以一个圆点开头,就能够在展开模式中包含隐藏文件,而且隐藏文件可能会出现在第一位置,如上面的命令行,而光是*就不会显示出隐含文件。
回想CD命令,~有特殊的意义,它用在一个单词的开头时,就会展开成指定用户的家目录名,如果没有指定用户名,则是当前用户的家目录。
6016@go:~$ echo ~
/home/EE/6016
6016@go:~$ echo ~foo
~foo
算术表达式由数值和算术操作符组成,只支持整数(全部是数字,不带小数点),但是能执行很多不同的操作。(+ 加 - 减 * 乘 / 除 % 取余 ** 取幂) 在算术表达式中空格并不重要,并且表达式可以嵌套。
花括号的展开可以从一个包含花括号的模式中创建多个文本字符串,包含一个开头部分叫做报头,一个结尾部分叫做附言。花括号表达式本身可能包含一个由逗号分开的字符串列表,或者一系列整数,或者单个的字符串,这种模式不能嵌入空白字符。
如果你把文本放在双引号中,shell 使用的特殊字符,除了$,\ ,和‘之外,则失去它们的特殊含义,被当作普通字符来看待。这意味着单词分割,路径名展开,波浪线展开,和花括号展开都被禁止,然而参数展开,算术展开,和命令替换仍然执行。使用双引号,我们可以处理包含空格的文件名。
因此,在双引号中,参数展开,算术表达式展开,和命令替换仍然有效。
随着继续学习shell,我们会发现使用展开和引用的频率逐渐多起来,所以能够很好的理
解他们的工作方式很有意义。事实上,他们是学习shell 的最重要的主题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,159评论 19 139
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,292评论 0 11
  • 第 3 章目录: 3.1 shell 语法3.2 shell 命令3.3 shell 函数3.4 shell 参数...
    C86guli阅读 11,536评论 2 4
  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 8,417评论 3 49
  • 我有可能是迷路了 除了黑暗什么我都看不见 但我只能向前走 或许 那根本不是我的前 我有可能是瞎了 我只能用手...
    星杳阅读 1,891评论 0 1

友情链接更多精彩内容