• echo - 显示一行文本
展开(字符)
每输入一个命令,然后按下 enter 键,在 bash 执行命令之前,bash 会对输入 的字符完成几个步骤处理,使这个发生的过程叫做(字符)展开。
通过展开,输入的字符在 shell对它起作用之前,会展开成为别的字符。echo 是一个 shell 内部命令,来完成非常简单的任务。
它在标准输出中打印出它的文本参数:
[me@linuxbox ~]$ echo this is a test
this is a test
这个命令的作用:传递到 echo 命令的任一个参数都会在(屏幕上)显示出来。
另一个例子:
[me@linuxbox ~]$ echo *
Desktop Documents ls-output.txt Music Pictures Public Templates Videos
为什么 echo 不打印“*”呢?
这个”*“字符意味着匹配文件名中的任意字符,所以答案就是:
在 echo 命令被执行 前,shell 把”*“展开成了另外的东西(在这种情况下,就是在当前工作目录下的文件名字)。
当回车键被按下时,shell 在命令被执行前在命令行上自动展开任何符合条件的字符, 所以 echo 命令从不会发现”*“,只把它展开成结果。
路径名展开
这种通配符工作机制叫做路径名展开,给出一个home目录,它看起来像这样:
[me@linuxbox ~]$ ls
Desktop ls-output.txt Pictures Templates
....
我们能够执行以下参数展开模式:
[me@linuxbox ~]$ echo D*
Desktop Documents
和:
[me@linuxbox ~]$ echo *s
Documents Pictures Templates Videos
甚至是:
[me@linuxbox ~]$ echo [[:upper:]]*
Desktop Documents Music Pictures Public Templates Videos
查看home目录之外的目录:
[me@linuxbox ~]$ echo /usr/*/share
/usr/kerberos/share /usr/local/share
隐藏文件路径名展开
以圆点字符开头的文件名是隐藏文件,路径名展开也尊重这种行为。
echo *
像这样的展开不会显示隐藏文件。
展开模式以一个圆点开头,我们就能够在展开模式中包含隐藏文件,而且隐藏文件可能会出现在第一位置
echo .*
我们会看到名字”.” 和”..”也出现在结果中。因为这些名字是指当前工作目录和它的父目录,使用这种模式可能会产生不正确的结果。
以下:
ls -d .[!.]?*
这种模式展开成为文件名,每个文件名以圆点开头,第二个字符不包含圆点,再包含至少一个字符, 并且这个字符之后紧接着任意多个字符。
这将列出大多数的隐藏文件 (但仍将不能包含以多个圆点开头的文件名)这个带有 -A 选项(“几乎所有”)的 ls 命令能够提供一份正确的隐藏文件清单:
ls -A
波浪线展开
波浪线字符(“~”)有特殊的意思,当它用在 一个单词的开头时,会展开成指定用户的home目录名,如果没有指定用户名,则是当前用户的home目录: