一些常用的变量,符号的意义:
----------------------------------------------------------
$?
上一条语句的执行结果
$$
当前进程ID
()
命令组,如 (a=0;echo $a),在命令组中的部分将作为子shell来运行,所以其中定义的变量在命令组外就不可用。
$()
同样是命令替换,它是以子shell来运行的,所以是不同的进程;
注意 | 管道符之后的命令也同样是一个子shell,所以不让尝试在子shell外去访问子shell中的局部变量!
{xxx,yyy}
大括号扩展作用echo {file1,file2}\:{A,B} # 大括号中不要留无意义的空格
file1:A file1:B file2:A file2:B
{} 代码块的作用,可以用来重定向代码块的标准输出、输入与()不同,{}并不会开启子shell
(())
数学计算扩展
<the>
正则表达式中的单词边界,grep '\<the\>' textfile
>|
强制重定向
""
引号的特殊效果是,保护字符中的特殊符号不被shell或者shell script重新解释或者扩展。(比如shell中的特别字符*)
单引号,硬转义,其内部的所有shell元字符,通配符都会被关闭。
双引号,软转义,其内部只允许出现特定的shell元字符:$用于参数替换 `用于命令代替。
var="a b c"
COMMAND $var # COMMAND 会带三个参数"a" "b" "c"
COMMAND "$var" # COMMAND 会带一个参数"a b c"
\
转义字符
一个具有特殊含义的字符前面放上一个转义字符就告诉shell这个字符失去了特殊的含义。
注意,在某些特定的命令中,比如echo和sed,转义字符往往起到相反的效果,它反倒有可能引发出这个字符的特殊含义。
-
代表标准输入或者标准输出
(cd /source/directory && tar cf - .) | (cd /dest/directory && tar xpvf -)
从一个目录移动整个目录树到另一个目录