之前写过一篇关于变量的总结文章,其内容还是有些遗漏,作此篇文章补充。
1.关于赋值
赋值有一种形式是将一个命令结果赋给变量。例如:
a=`ls -l`
如果是写在脚本里执行,不会有什么问题。
但是如果是直接命令行执行,则有一种特殊情况。
即如果包含“!”那么会报错。
例如:
2.关于引用
变量引用以下2种形式会略有区别。
a=`ls -l`
echo $a
echo
echo "$a"
echo "$a"将会保留空白部分(包括换行)
3.关于脚本参数变量
下面这个脚本将演示一个技巧
args=$#
lastarg=${!args}
echo $lastarg
如果运行脚本没有参数,那么将输出脚本名城;如果参数个数大于0,那么将输出最后一个参数。
通过$#这个参数可以判断脚本运行时的参数数量。
除了利用$#,还可以使用如下方式来判断运行脚本是否有参数:
if [ -z $1 ] #直接判断是否为空
${1:-$DefaultValue} #$DefaultValue是预先设置的缺省值变量,如果$1为空,那么会引用$DefaultValue变量的值
通过shift命令,可以让脚本参数位置向左1个位置。即从左向右的参数第2个变成第1个,第3个变成第二个以此类推。而第1个参数原值被销毁。
以下一个例子演示命令带参数执行三种效果:
v="" #变量为空值
command $v $v $v #command命令将不带参数执行
command "$v" "$v" "$v" #command命令将带3个参数执行,三个参数为空
command "$v $v $v" #command命令将带1个参数执行,参数为两个空格