|
$ 变量替换操作符。
只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候,
变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用”=”,
read状态或者是在循环的头部.
在”"中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在”中就不会发生变
量替换,这叫做全引用,也叫强引用.
注意:$var 与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2.
shell中的一半变量都是全局的 整个脚本中都能用
Example1:
[cce]
#!/bin/bash
a=123
hello=$a # 强烈注意,在赋值的前后一定不要有空格.
echo hello # 没有变量引用,不过是个hello 字符串
echo $hello #输出123
echo ${hello} # 同上
echo "$hello" # 同上
echo "${hello}" # 同上
hello="A B C D"
echo $hello # A B C D
echo "$hello" # A B C D
# 引用一个变量将保留其中的空白,当然,如果是变量替换就不会保留了
echo '$hello' # $hello 这就是全引用的效果。
hello= # 设置为空值
echo "\$hello (null value) = $hello"
# 注意设置一个变量为空,与unset 它,不是一回事,虽然看起来一样
var1=21 var2=22 var3=$V3 # 可以在同一行上设置多个变量.空格分开
echo "var1=$var1 var2=$var2 var3=$var3" # var1=21 var2=22 var3=23
uninitialized_variable=23 # 赋值
unset uninitialized_variable #unset 取消赋值
echo "$uninitialized_variable" #输出 空值
echo "$uninitialized" # 引用未定义变量会报错
let "uninitialized += 5" # 但是可以用未定义变量做算数运算
echo "$uninitialized" # 运算中未定义变量为0
[/cce]
Example2:
[cce]
#!/bin/bash
a=123 # = 号赋值
let a=12+2 #let 也可赋值
for a in 7 8 9 11 #for 也可以赋值
do
echo -n "$a "
done
read a #read 赋值
a=`ls -l` 或 a=$(ls -l) #这两个都可用于命令替换
echo $a # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没了(包括换行)
echo "$a" # 这么引用就正常了,保留了空白
[/cce]
注意:bash变量是没有类型的,
Bash 变量都是字符串.
但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值
是否只有数字.
例:
[cce]
#!/bin/bash
a=123 #a整型
let "a+=1" #a整型 124
b=${a/12/BB} #b=BB4 字符型
declare -i b # 即使使用declare 命令也不会对此有任何帮助
let "b += 1" # BB4 + 1 =1 字符型在运算中相当于0
d=${b/BB/23} #d=234 变为了整型
[/cce]
三种特殊类型的变量:
local 只有在代码块或函数中见到。局部变量,作用域只在代码块或是函数中。
environmental 这种变量将改变用户接口和 shell 的行为.
positional parameters 命令中传进的值。,$0, $1, $2, $3… 其中 $0就是脚本文件的名字,,$1 是第一个参数,$2 为第2 个,
9
以后就需要打括号了,如${10},${11},${12}…两个值得注意的变量$*和$@,表示所有的位置参数.
如脚本test运行要4个参数 执行: ./test 1 2 3 4 ……这是 test脚本中的$0=test $1=1 $2=2 ..$#=4(参数个数) $*=1 2 3 4(所以参数)
shift shift 命令重新分配位置参数,其实就是向左移动一个位置.
$1 |
|
|