变量赋值,一般的和比较特殊的:
# Simple case
a=23
echo $a
b=$a
echo $b
[root@ ~]# a=`echo Hello!`
-bash: !`: event not found
注意,如果在命令扩展结构中使用一个(!)的话,在命令行中将不能工作,因为这触发了 Bash的"历史机制".
a=`ls -l` # 把ls -l 的结果给 a
echo $a # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没(包括换行)
echo "$a" # 这么引用就正常了,保留了空白
使用$(...)机制进行的变量赋值(除去使用``来赋值的另外一种新方法). 事实上这两种方法都是
命令替换的一种形式.
[root@ ~]# a=2334
[root@ ~]# let "a += 1"
[root@ ~]# echo "a=$a"
a=2335
[root@ ~]# b=${a/23/BB} # 将23替换成BB
[root@ ~]# echo "b=$b"
b=BB35
空变量会怎样:
[root@ ~]# e=""
[root@ ~]# echo "e=$e"
e=
[root@ ~]# let "e+=1"
[root@ ~]# echo "e=$e"
e=1
[root@ ~]# echo "e=$e"
e=1
[root@ ~]# let "e+=1"
[root@ ~]# echo "e=$e"
e=2
未声明变量会怎样:
[root@ ~]# echo "f=$f"
f=
[root@ ~]# let "f+=1"
[root@ ~]# echo "f=$f"
f=1
如果一个脚本设置了环境变量,需要export 它,来通知本脚本的环境,这是export命令的功能。脚本只能对它产生的子进程export 变量.一个从命令行被调用的脚本export 的变量,将不能影响调用这个脚本的那个命令行shell 的环境.
位置变量:
就是从命令行中传进来的参数,$0, $1, $2, $3...
$0就是脚本文件的名字,$1 是第一个参数,$2 为第2 个...,参见[1]( 有$0的说明),$9以后就需要打括号了,如${10},${11},${12}...
两个值得注意的变量$*和$@, 表示所有的位置参数.