【BASH】脚本接触之shell变量
2009-05-07 14:56
603 查看
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-value和R-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中一切都是字符串,'$'用来引用变量。
通常情况,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-value和R-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中一切都是字符串,'$'用来引用变量。
相关文章推荐
- shell bash 脚本特殊变量
- BASH命令和SHELL脚本总结(16)父脚本中export的变量在子脚本中的可见性测试
- Shell(bash)脚本学习之--------内建/外建,自定义变量和环境变量
- shell脚本学习第四天——bash内部变量,变量主串,变量替换
- Bash Shell脚本编程-变量知识
- Shell脚本编程之Bash特性-IO重定向-变量
- [Linux] shell bash 脚本特殊变量 [大三TJB_708]
- Linux脚本编程:Bash shell脚本的大括号
- Linux系统shell脚本判断变量文件目录:权限、是否存在、空值、相等
- Linux系统shell脚本判断变量文件目录:权限、是否存在、空值、相等
- shell脚本,变量、data用法
- 如何在shell脚本里传递一个变量给awk
- 这里有个老American写的 BASH脚本编写教程,非常不错,至少没接触过BASH的也能看懂!
- linux bash Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
- shell脚本报错:-bash: xxx: /bin/sh^M: bad interpreter: No such file or directory
- 脚本乐园 shell 自定义函数(定义、返回值、变量作用域)介绍
- BASH命令和SHELL脚本总结(11)比较两个文件创建时间的先后
- 玩转Bash脚本:特殊变量
- crontab启动shell脚本的环境变量问题