字符展开
[hjw@localhost bin]$ echo *
输出~目录下的文件
路径名展开
[hjw@localhost redis-3.2.9]$ echo r*
命令会列出redis-3.2.9目录下的所有r开头的文件
算术表达式展开
[hjw@localhost ~]$ echo $((2+2))
可以直接进行算术运算
花括号展开
这个命令会根据花括号中的值来创建多个字符串
[hjw@localhost ~]$ echo Front-{A,B,C}-Back
输出结果:
Front-A-Back Front-B,C-Back
这个命令使用了 .. 符号
[hjw@localhost ~]$ echo Number_{1..5}
输出结果:
Number_1 Number_2 Number_3 Number_4 Number_5
还可以进行花括号嵌套
[hjw@localhost ~]$ echo a{A{1,2},B{3,4}}b
输出结果:
aA1b aA2b aB3b aB4b
利用这个特性,我们可以创建一系列规则相同的文件名
[hjw@localhost ~]$ mkdir {2007..2009}-0{1..9}
会创建如下规则的文件夹:
2007-01 2007-05 2007-09 2008-04 2008-08 2009-03 2009-07
2007-02 2007-06 2008-01 2008-05 2008-09 2009-04 2009-08
2007-03 2007-07 2008-02 2008-06 2009-01 2009-05 2009-09
命令替换
命令替换允许我们把一个命令的输出作为一个展开模式来使用
[hjw@localhost ~]$ ls -l $(which cp)
输出结果:
-rwxr-xr-x. 1 root root 155168 11月 6 2016 /usr/bin/cp
与下面这条命令相同:
[hjw@localhost ~]$ ls -l /usr/bin/cp
这样我们可以在不知道文件夹路径的情况下直接看到文件夹信息
单双引号对比
[hjw@localhost ~]$ echo text ~/*2.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/hjw/hjw2.txt a b foo 4 hjw
[hjw@localhost ~]$ echo "text ~/*2.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*2.txt {a,b} foo 4 hjw
[hjw@localhost ~]$ echo 'text ~/*2.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*2.txt {a,b} $(echo foo) $((2+2)) $USER
单引号会禁止所有展开
转义字符
[hjw@localhost ~]$ echo "The balance for user $USER is: \$5.00"
这里有选择的阻止上 5的展开。如果不使用 5会被当作一个为空的变量
常见转义字符
\a 响铃(”警告”-导致计算机嘟嘟响)
\b 退格符
\n 新的一行。在类 Unix 系统中,产生换行。
\r 回车符
\t 制表符
echo 加上一个 e 参数就可以解析转义字符
[hjw@localhost ~]$ echo -e "Time's up \a"