通过展开,你输入的字符,在 shell 对它起作用之前,会展开成为别的字符。如:
[SL@SL ~]$ echo *
Desktop Pic txt.save
shell 在 echo 命令被执行前把 * 展开成了当前工作目录下的文件名字。
路径名展开
通配符所依赖的工作机制叫做路径名展开。
波浪线展开
波浪线字符(“~”)有特殊的含义。当它用在一个单词的开头时,它会展开成指定用户的家目录名,如果没有指定用户名,则展开成当前用户的家目录。
[SL@SL ~]$ echo ~
/home/SL
算术表达式展开
格式:$((expression))
echo $((2 + 2))
4
花括号展开
花括号表达式本身可 能包含一个由逗号分开的字符串列表,或者一系列的整数,或者单个的字符串。这种模式不能嵌入空白字符。
echo Front-{A,B,C}-Back
Front-A-Back Front-B-Back Front-C-Back
echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
参数展开
$ 变量调用符号
用法: $变量
机制:调用变量,从而得到‘变量的值’
命令替换
Linux命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个Linux命令的参数
echo $(ls)
Desktop Documents ls-output.txt Music Pictures Public Templates Videos
也可用倒引号来代替$()
ls -l `which cp`
-rwxr-xr-x 1 root root 71516 2007-12-05 08:58 /bin/cp
引用
shell 提供了一种 叫做引用的机制,来有选择地禁止不需要的展开。
"" 双引号
机制:把它所包含的内容作为普通字符,但 $,\ (反斜杠),和 `(倒引号)除外
意味着单词分割,路径名展开,波浪线展开,和花括号展开都将失效,然而参数展开,算术展开,和命令替换 仍然执行。
'' 单引号
机制:把它所包含的内容作为普通字符,无例外
echo text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
text /home/me/ls-output.txt a b foo 4 SL
双引号中波浪线展开,路径名展开,花括号展开均失效,参数展开,算术展开,和命令替换 仍然执行。
echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER"
text ~/*.txt {a,b} foo 4 me
单引号中全部失效
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
转义字符
字符之前加上一个反斜杠 \