shell反引号 单双引号 设置变量 特殊变量
- 2015-04-25 16:23:00
- admin
- 原创 3701
一、反引号
反引号和$()起着命令替换的作用,把命令的标准输出插在命令行的任何位置,注意会去除末尾换行符。
echo `date "+%Y-%m-%d %H:%M:%S"`
echo $(date "+%Y-%m-%d %H:%M:%S")
二、单双引号
1、双引号忽略多数特殊字符,但不包括$和`,双引号变量只是传递给变量时带双引号;
2、单引号告诉shell忽略所有特殊字符,单引号变量传递给变量或者命令时带单引号;
3、单引号支持定义C语言转义字符串,$属性具备传递性,v1和v2都有$属性;
v1=$'a\nb' && v2="\n$v1" && set
v1=$'a\nb'
v2=$'\\na\nb'
三、设置变量(派生shell会导入现有shell的环境变量)
设置变量:key=value或key=$var,value不能有空格,$var变量可以有空格,set命令查看设置结果;
设置变量到命令输出:key=`cmd`,命令输出可以有空格,C式转义字符串根据内容自动设置;
设置动态变量:eval base$num=value,eval作用是先计算字符串,然后将字符串放到shell执行;
脚本导出变量:export key=value,需要使用source命令,只需导出一次,env命令查看设置结果;
清除变量:unset key,清除环境变量或普通变量,变量只能是环境变量或普通变量;
四、特殊变量
1、$0,脚本名;
2、$1,$9,${10},位置参数,shift命令修改位置参数队列及位置参数个数;
3、$#,位置参数的个数;
4、$*,所有参数组成的字符串;
5、$@,每个参数作为一个独立的字符串,$*=$@,"$*"!="$@",后者在for循环时有差别;
6、$?,返回值;
7、$$,脚本的进程PID;
8、$!,运行在后台的最后一个作业的进程PID;
9、$HOME,HOME目录,shell和crontab都可以拿到;