1, Pathname Expansion 路径扩展
用已有文件路径来填充,例如:
echo *s
echo [[:upper:]]*
echo /usr/*/share
echo *
echo .*
echo .[!.]*
2,Tilde Expansion 波浪号扩展
~代表用户,例如
echo ~ 当前登录用户家目录
~后面还可以跟用户名,例如
[me@linuxbox ~]$ echo ~foo
/home/foo
3,Arithmetic Expansion, 算术运算,只支持整数。
$((expression))
Operator Description
+ 加
- 减
* 乘
/ Division (but remember, since expansion supports only integer arithmetic, results are integers).
% 取模
** 乘方
expression 可以使用小括号,
echo $(($((5**2)) * 3)) 等价于 echo $(((5**2) * 3))
4, Brace Expansion 大括号展开
大括号里边可以是以逗号','分割的字符串list;也可以是一定范围内的整数或者一定范围内的单个字符,以'.'分割。但是不能包含不带引号的空格。例如:
[me@linuxbox ~]$ echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
[me@linuxbox ~]$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
[me@linuxbox ~]$ echo {01..15}
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
[me@linuxbox ~]$ echo {001..15}
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015
[me@linuxbox ~]$ echo {Z..A}
Z Y X W V U T S R Q P ON M L K J I H G F E D C B A
大括号还可以级联
[me@linuxbox ~]$ echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
酷!
mkdir {2007..2009}-{01..12}
5,Parameter Expansion 参数扩展
例如
echo $USER
6,Command Substitution 命令替换
例如
echo $(ls)
老式shell里边使用特殊引号
ls -l `which cp`
引号
1,双引号
双引号里边只有,“$”, “\” , “`”有特殊作用,其他都是其字面量。意味着,word-splitting、pathname expansion、tilde expansion、brace expansion 被禁用,但是arithmetic expansion、parameter expansion、command substitution仍然有效。
例如:
[me@linuxbox ~]$ ls -l "two words.txt"
-rw-rw-r-- 1 me me 18 2016-02-20 13:03 two words.txt
[me@linuxbox ~]$ echo "$USER $((2+2)) $(cal)"
2,单引号
禁用所有的扩展expansions。
例如:
[me@linuxbox ~]$ echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 me
[me@linuxbox ~]$ echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 me
[me@linuxbox ~]$ echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
3,转义符 Escaping Characters
在双引号里边用反斜线“\”用作转义符,需要转义的字符包括,“$”, “!”, “&”, 空格, and others,例如
[me@linuxbox ~]$ echo "The balance for user $USER is: \$5.00"
The balance for user me is: $5.00
To include a special character in a filename we can do this:
[me@linuxbox ~]$ mv bad\&filename good_filename
可以使用“\\”来表示反斜线本身。