1  变量

在shell里,使用变量之前通常并不需要事先为它们做出声明。你只是通过使用它们(比如当你给它们赋初始值时)来创建它们。在默认情况下,所有变量都被看做字符串来存储,即使它们被赋值为数值时也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对它们进行操作。Linux是一个区分大小写的系统,因此shell认为变量foo与Foo是不同的,而这两者与FOO又是不同的。

在shell中,你可以通过在变量名前加一个$符号来访问它的内容。无论何时你想要获取变量内容,你都必须在它前面加一个$字符。当你为变量赋值时,你只需要使用变量名,该变量会根据需要被自动创建。一种检查变量内容的简单方式就是在变量名前加一个$符号,再用echo命令将它的内容输出到终端上。

在命令行上,你可以通过设置和检查变量salutation的不同值来实际查看变量的使用:

$ salutation=Hello
$ echo $salutation
Hello
$ salutation="Yes Dear"
$ echo $salutation
Yes Dear
$ salutation=7+5
$ echo $salutation
7+5

注意,如果字符串里包含空格,就必须用引号把它们括起来。此外,等号两边不能有空格。

你可以使用read命令将用户的输入赋值给一个变量。这个命令需要一个参数,即准备读入用户输入数据的变量名,然后它会等待用户输入数据。通常情况下,在用户按下回车键时,read命令结束。当从终端上读取一个变量时,你一般不需要使用引号,如下所示:

$ read salutation
Wie geht's?
$ echo $salutation
Wie geht's?


一般情况下,脚本文件中的参数以空白字符分隔(例如,一个空格、一个制表符或者一个换行符)。如果你想在一个参数中包含一个或多个空白字符,你就必须给参数加上引号。

像$foo这样的变量在引号中的行为取决于你所使用的引号类型。如果你把一个$变量表达式放在双引号中,程序执行到这一行时就会把变量替换为它的值;如果你把它放在单引号中,就不会发生替换现象。你还可以通过在$字符前面加上一个\字符以取消它的特殊含义。

字符串通常都被放在双引号中,以防止变量被空白字符分开,同时又允许$扩展。