shell 两种变量的表示方法,大括号的作用
2010-07-07 13:21
155 查看
在shell中,取一个变量值的方法——$varname的语法实际上是常用语法${varname}的简写形式
个人倒感觉,加上这个大括号,虽然多写了点东西,不过从后面的内容(毕竟我是先看的书嘛,后面的悄悄瞧了点)来看,还是有必要的。
为什么会有两种语法呢?
一个原因是:当代码中引用了多于9个位置参数,则必须使用常用语法${10},而不是$10。
#/bin/bash
echo "$# args"
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10
如果是这样的话,执行./paramlist 1,2,3,4,5,6,7,8,9,0
得到的结果为:
10 args
1,2,3,4,5,6,7,8,9,10
如果执行./paramlist 1,2,3,4,5,6,7,8,9,a
得到的结果仍然为:
10 args
1,2,3,4,5,6,7,8,9,10
所以说,代码中引用了多于9个位置参数时,则必须使用常用语法${10}而不是$10
另外让我们考虑下面的情况,即用户的变量名后面有一个下划线
echo $UID_
shell会试图使用UID_作为变量名。除非出现$UID_已经存在的偶然情况,否则该语句不会打印任何内容(为null或空字符串)
要得到预期结果需要将该变量放入大括号内
echo ${UID}_
如果变量后面跟一个非小字字符串、数字或下划线,则省略大括号就没问题。
是不是很难懂?我也烦这种浪费脑细胞的话,
所以这句话翻译成人能听得懂的话就是:
如果变量名后面要跟如下内容:非小写字符串(包括大小字符串)、数字或下划线,那么变量名就一定要用大括号包起来
个人倒感觉,加上这个大括号,虽然多写了点东西,不过从后面的内容(毕竟我是先看的书嘛,后面的悄悄瞧了点)来看,还是有必要的。
为什么会有两种语法呢?
一个原因是:当代码中引用了多于9个位置参数,则必须使用常用语法${10},而不是$10。
#/bin/bash
echo "$# args"
echo $1,$2,$3,$4,$5,$6,$7,$8,$9,$10
如果是这样的话,执行./paramlist 1,2,3,4,5,6,7,8,9,0
得到的结果为:
10 args
1,2,3,4,5,6,7,8,9,10
如果执行./paramlist 1,2,3,4,5,6,7,8,9,a
得到的结果仍然为:
10 args
1,2,3,4,5,6,7,8,9,10
所以说,代码中引用了多于9个位置参数时,则必须使用常用语法${10}而不是$10
另外让我们考虑下面的情况,即用户的变量名后面有一个下划线
echo $UID_
shell会试图使用UID_作为变量名。除非出现$UID_已经存在的偶然情况,否则该语句不会打印任何内容(为null或空字符串)
要得到预期结果需要将该变量放入大括号内
echo ${UID}_
如果变量后面跟一个非小字字符串、数字或下划线,则省略大括号就没问题。
是不是很难懂?我也烦这种浪费脑细胞的话,
所以这句话翻译成人能听得懂的话就是:
如果变量名后面要跟如下内容:非小写字符串(包括大小字符串)、数字或下划线,那么变量名就一定要用大括号包起来
相关文章推荐
- shell sed中引用shell变量及空格表示方法
- 向awk传递shell变量的两种方法
- shell中逻辑与的两种表示方法
- shell sed中引用shell变量及空格表示方法
- awk中使用shell变量的两种方法
- 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法
- 【java】给成员变量赋值的两种方式的区别 --setXxx()方法和构造方法
- Like 作用于汉字查找的表示方法
- Qt优雅地结束线程(两种方法都是用Mutex锁住bool变量进行修改,然后由bool变量控制耗时动作的退出,即正常退出)
- 几种shell里的小括号,大括号结构和有括号的变量,命令的用法
- shell表达式中引用外部变量的方法(例如awk中引用外部变量)
- 顺序表应用1:多余元素删除之移位算法(两种表示方法)
- sed、awk调用shell变量的方法
- python和shell变量互相传递的几种方法
- 几种shell里的小括号,大括号结构和有括号的变量,命令的用法
- 网站后台备份自动备份成ASA格式却并不表示拿Shell方法
- shell中使用awk,awk 4000 引用shell变量的方法
- php判断变量是否是整数的两种方法
- shell变量计算长度及加减运算方法总结
- 运行 Shell 脚本有两种方法