每当输入一个命令按下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 的最重要的主题。