Bash Shell变量

bash shell 编程和其他编程语言差不多,同样包含变量(存放字符串和数值的容器,可以进行修改、比较、传递)。在引用 bash 变量时,可以使用一些非常特殊的运算符。bash 还拥有内建变量,这些变量可以提供有关脚本中其他变量的重要信息。本章将介绍 bash 变量和一些特殊的变量引用机制,展示如何将其运用于你自己的脚本。

bash 脚本中的变量名称通常采用全大写,但这并非强制性的,只是一种常见做法而已。变量不用事先声明,直接使用就行了。变量基本上都是字符串类型,不过有些运算符能够将变量内容视为数字。变量的实际用法如下所示。

# 使用shell变量的普通脚本
# (不过好歹也注释过了)
MYVAR="something"
echo $MYVAR
# 写法类似,但没有引号
MY_2ND=anotherone
echo $MY_2ND
# 这里需要使用引号:
MYOTHER="more stuff to echo"
echo $MYOTHER

bash 变量的语法有两处要点,但可能不那么一目了然。首先,赋值语法 name=value 看起来相当直观,但 = 两侧不能有任何空白字符。

我们来想想为什么是这样。记住,shell 的主要目的是执行命令:你在命令行上指定要执行的命令。命令名之后的任何单词都会作为参数传给该命令。例如,当你敲入:

ls filename

其中,单词 ls 是命令名,filename 是这个示例中第一个,也是唯一一个参数。

这有什么关系?考虑一下,如果允许 = 两侧出现空白字符,那么变量赋值就会变成下面这样:

MYVAR = something

看出来没有,此时 shell 很难区分出到底是要调用命令(如本例中的 ls)还是要给变量赋值。对于能够以 = 为参数的命令(如 test)更是如此。所以,还是让事情简单点吧:变量赋值时,shell 不允许在 = 两侧出现空白字符。该规定的另一方面也值得注意:不要在文件名中使用 =,对于 shell 脚本尤为如此(尽管可行,但不推荐)。

其次需要注意的是,引用变量时要使用 $ 符号。给变量赋值时不需要在变量名前加 $,但获取变量值时需要。(出现在表达式 $(()) 中的变量是个例外。)用编译器的行话来说,赋值和检索值在语法上的差异就是变量的左值(L-value)与右值(R-value)之间的差异(赋值运算符的左侧和右侧)。
原因很简单,就是为了消除歧义。思考下列情况:

MYVAR=something
echo MYVAR is now MYVAR

正如这个示例试图指出的,你能分辨出哪个是字符串 MYVAR,哪个是变量 MYVAR 吗?使用引号?如果将字符串放进引号,那么一切只会更乱,你得将包括命令在内的所有非变量名全部加上引号!没人想像下面这样敲命令:

"ls" "-l" "/usr/bin/xmms"

(对于那些想试试看的用户来说,没错,这么写确实也管用。)因此,不用将一切都加上引号,使用右值语法来引用变量就够了。要想获得与某个变量名相关联的值,在变量名前加上 $ 符号即可。

MYVAR=something
echo MYVAR is now $MYVAR

只需记住,bash 中的一切都是字符串,所以需要用 $ 来表明变量引用。另外,有可能还得在变量名两边加上花括号。

酷客网相关文章:

赞(1)

评论 抢沙发

评论前必须登录!