Linux系统中SHELL命令或脚本中关于$理解

来源:互联网 发布:十代思域18寸轮毂数据 编辑:程序博客网 时间:2024/05/20 19:48
*在使用执行shell命令或脚本时,shell的解释器会现将$param,替换为$param所表示的值到要执行shell命令或脚本中如下面三个例子,$HOSTNAME表示的值为:server01所以,a值为:server01;b值为:$HOSTNAME;c值为:server01。之所以c与a同,b与a不同,是因为''中的字符仅表示字符本身,而""中字符如$表示其后面一串连续[0-9a-zA-Z_]字符串为变量,shell解释器会将$连接的变量,替换到命令或脚本中再去执行。[root@server01 ~]# a=$HOSTNAME[root@server01 ~]# echo $aserver01[root@server01 ~]# b='$HOSTNAME'[root@server01 ~]# echo $b$HOSTNAME[root@server01 ~]# c="$HOSTNAME"[root@server01 ~]# echo $cserver01说下一些要注意的小问题!a='a1'ab='ab2'$a毫无疑问值为a1,$ab是用$a的值连接'b',还是使用$ab的值。如果是前面则结果为:a1b。下面是结果:[root@server01 ~]# a='a1'[root@server01 ~]# ab='ab2'[root@server01 ~]# echo "$a"a1[root@server01 ~]# echo "$ab"ab2所以$后连接的变量名正则表达式为:[a-zA-Z_][0-9a-zA-Z_]* 。[root@server01 ~]# echo $ab,cab2,c[root@server01 ~]# echo $ab_c[root@server01 ~]# echo $ab3c[root@server01 ~]# echo $abAc因为','不匹配,所以shell解释器在','停止,并取其前面的字符串ab的$值。后面三个都匹配了正则表达式,断这三个变量尚未赋值所以为空。再说下,上面的正则表达式: [a-zA-Z_][0-9a-zA-Z]* 并不完善。因为如果以下划线'_'开头的变量其长度最少为2,页就是说不能只用一个'_'表示变量,虽然可以赋值但没有结果。[root@server01 ~]# _=6[root@server01 ~]# echo $_[root@server01 ~]# _9=4[root@server01 ~]# echo $_94[root@server01 ~]# _a=3[root@server01 ~]# echo $_a3[root@server01 ~]# __=0[root@server01 ~]# echo $__0最后正则表达式为: ([a-zA-Z]|_[0-9a-zA-Z_])[0-9a-zA-Z_]*下一篇是SHELL下单双引号与正则表达的纠缠
0 0