第二十八章 字符串与数字
第二十八章 字符串与数字
计算机程序完全就是和数据打交道。很多编程问题需要使用字符串和数字这种更小的数据来解决。
参数扩展
第七章,已经接触过参数扩展,但未进行详细说明,大多数参数扩展并不用于命令行,而是出现在脚本文件中。
如果没有什么特殊原因,把参数扩展放入双引号是一种不错的做法,应该坚持这种做法,这样可以避免出现意想不到的单词分割。在处理文件名的时候尤为如此,因为文件名经常会含有空格符和其它字符。
基本参数
日常使用的变量就是参数扩展最简单形式,例如
$a
扩展结果就是变量a所包含的值。参数也可以在两侧加上花括号:
${a}
如果变量仅挨着其它文本,花括号就不能少,否则可能会对Shell造成混淆。
例如:通过在变量a的值之后追加字符串_file,以此创建文件名称:
a="foo"
echo "$a_file"
执行上述命令,变量a的值不会有任何变化,因为Shell尝试扩展的是变量a_file,而不是变量a。在“真正的”变量名两侧添加花括号就可以解决这个问题:
echo "${a}_file"
命令输出结果如下:
foo_file
大于9的位置参数也可以通过在数字两侧添加花括号来访问。例如要想访问第11个位置参数,可以这样:
${11}
管理空变量扩展
有些参数扩展用于处理不存在变量或空变量,这类扩展在处理位置参数缺失以及为参数设置默认值的时候非常方便。来看这样一个扩展:
${parameter:-word}
如果paramete未设置或为空,则使用word为扩展结果。如果parameter不为空,则使用parameter的值作为扩展结果。例如:
再看另一个扩展,其中使用等号代替了连字符:
${parameter:=word}
如果parameter未设置或为空,则使用word作为扩展结果,除此之外,还将word赋给parameter。如果parameter不为空,则使用parameter的值作为扩展结果。例如:
位置参数和其它特殊参数不能用这种方法复制。
这次改用问号:
${parameter:?word}
如果parameter未设置为空,该扩展会使脚本退出并返回错误信息,word会被发送至标准错误。如果parameter不为空,则使用parameter的值作为扩展结果。例如: