【BASH】脚本接触之shell变量

 

bash脚本编程跟其他的编程一样,都是有保存string/number的变量,这些变量可以用来赋值,比较,作为参数传递等。但是bash脚本中的变量有一些特殊的操作符可以方便你使用它们,同时bash提供一系列提供丰富信息的内嵌变量。接下去几天会看到的都是跟bash变量的使用相关。

 

通常情况,bash变量使用全大写名称,这不是强制的。变量不必像c语言中提前声明,哪里需要就可以在那里使用,尽管有时bash某些操作会将变量当作数字对待,实际上变量都是各种各样的字符串。请看下面的示例:

# trivial script using shell variables

# (but at least it is commented!)

MYVAR="something"

echo $MYVAR

# similar but with no quotes

MY_2ND=anotherone

echo $MY_2ND

# quotes are needed here:

MYOTHER="more stuff to echo"

echo $MYOTHER

 

关于bash变量,有两点非常重要。第一,bash变量赋值,name=value这种大家可能见的多了,注意,等号两边都不能有空白符。

说哈这个原因:前面说了shell运行程序的基本语法---你在命令行输入程序名,然后程序运行。所有命令后面的内容都将作为参数传递给程序,如下:

$ ls filename

上例中,'ls'是程序名,'filename'作为第一个也是唯一一个传递给'ls‘的参数。

这个例子跟刚刚说的有关吗?考虑下bash如果允许赋值时在等号两边存在空白符,如下:

MYVAR = something

bash在区分是需要调用的命令还是赋值语句时会很困难,尤其当有的程序使用'='作为它的一个或者多个参数(e.g. test)。所以还是尽量保持代码的简洁吧,否则bash将视他们为独立分开的字,同时命名文件的时候最好不要使用'=',尤其是脚本文件。

 

第二点: 引用shell变量时不使用'$',这是语法错误。所以,给变量赋值的时候不使用'$',在引用的时候要使用。用编译原理的行话说,这两种语法的不同是变量的L-valueR-value

 

再一次强调,这样做的目的是消除语义的二义性,如下:

MYVAR=something

echo MYVAR is now MYVAR

上面这个例子说的是,bash不能区分字符串”MYVAR”还是变量$MYVAR的值,如果使用双引号能解决吗?不能,并且会更糟,所有的非变量名字都需要使用双引号,包括命令,你希望像下面一样使用命令吗?

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

如果你尝试的话,上面这个是行的通的。所以,还是在引用变量的时候使用R-value语法吧。

MYVAR=something

echo MYVAR is now $MYVAR

 

谨记,shell中一切都是字符串,'$'用来引用变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值