变量替换的值也可以是` `括起来的命令:$USERDIR={$Mydir:-`pwd`} ${var:?message} 当没有指定message时,shell将显示一条默认的消息,例如: $UNAME= $echo ${UNAME:?} 结果显示:sh:UNAME:parameter null or not set 速记法: n = 慈善家(你没有才给你) n + 商人(你有才给换) n - 假慈善家(表明上才给) n ? 牛皮精(只说不做) n 加“:”后,相当于把“空值”也当作“unset”值处理,对有值的变量则无影响[/color]
[color=darkblue]F、bash 的组数(array)处理[/color] 一般而言,A="a b c def" 这样的变量只是将 $A 替换为一个单一的字符串,但是改为 A=(a b c def) ,则是将 $A 定义为组数。bash 的组数替换方法可参考如下方法: ${A[@]} 或 ${A[*]} 可得到 a b c def (全部组数); ${A[0]} 可得到 a (第一个组数),${A[1]} 则为第二个组数; ${#A[@]} 或 ${#A[*]} 可得到 4 (全部组数数量); ${#A[0]} 可得到 1 (即第一个组数(a)的长度),${A[3]} 可得到 3 (第一个组数(def)的长度); A[3]=xyz 则是将第 4 个组数重新定义为 xyz。
[color=blue]3) 清除赋值:unset <变量>[/color] 变量一旦经过 unset 取消之后,其结果是将整个变量拿掉,而不仅是取消其变量值。如下两行其实是很不一样的: $ A= $ unset A 第一行只是将变量 A 设定为"空值"(null value),但第二行则让变量 A 不在存在: $ A= $ echo $A 打印输出为空 $ unset A $ echo $A 打印输出为空 请务必能识别 null value 与 unset 的本质区别,这在一些进阶的变量处理上是很严格的。与export一样,unset 命令行也同样会作变量替换(这其实就是 shell 的功能之一),因此: A=B B=C unset $A 事实上所取消的变量是 B 而不是 A 。