指定变量的类型及变量的间接引用
2017-08-12 11:07
246 查看
指定变量的类型: 使用declare或者typeset
declare 或者typeset 内建命令(这两个命令是完全一样的)允许指定变量的具体类型.declare/typeset选项
-r 只读declare -r var1 # 与readonly var1是一样的.
-i 整型
declare -i number # 脚本会把变量"number"按照整形进行处理. number=3 echo "Number = $number" # number = 3 number=three echo "Number = $number" # number = 0 # 脚本尝试把字符串"three"作为整数来求值(失败,所以出现值为0).
如果把一个变量指定为整型的话, 那么即使没有expr或者let命令, 也允许使用特定的算术运算.
n=6/3 echo "n = $n" # n = 6/3 declare -i n n=6/3 echo "n = $n" # n = 2
-a 数组
declare -a indices # 变量indices将被视为数组.
-f 函数
declare -f # 如果在脚本中使用declare -f, 而不加任何参数的话,那么将会列出这个脚本之前定义的所有的函数.
declare -f function_name # 如果在脚本中使用declare -f function_name这种形式的话,将只会列出这个函数的名字.
-x export
declare -x var1 # 这句将会声明一个变量,并作为这个脚本的环境变量被导出.
-x var=$value
declare -x var=123 # declare命令允许声明变量类型的同时给变量赋值.
*使用declare内建命令可以限制变量的作用域.
foo () { FOO="bar" } bar () { foo echo $FOO } bar # 打印bar foo () { declare FOO="bar" } bar () { foo echo $FOO } bar #什么都不打印.
变量的间接引用
假设一个变量的值是第二个变量的名字. 那么如何从第一个变量中取得第二个变量的值呢? 比如,如果 a=letter_of_alphabet 并且 letter_of_alphabet=z , 那么我们能够通过引用变量 a 来获得 z 么? 这确实是可以做到的, 它被称为间接引用. 它使用 eval var1=$$var2 这种不平常的形式.变量的间接引用给Bash添加了一种类似于 C 语言指针的功能.
#!/bin/bash # 间接变量引用. a=letter_of_alphabet # 变量"a"的值是另一个变量的名字. letter_of_alphabet=z echo # 直接引用 echo "a = $a" # a = letter_of_alphabet # 间接引用 eval a=\$$a echo "Now a = $a" # Now a = z exit 0
Bash并不支持指针运算操作, 因此这极大的限制了间接引用的使用.
相关文章推荐
- 记住:一个很简单又很复杂的规则:一个类型引用只能引用类型本身含有的方法和变量
- 【Java基础】在使用@Deprecated注解时发生的对象引用变量的类型的问题
- JavaScript变量类型:值类型与引用类型
- 引用类型变量的赋值
- Java自学之路-Java基础教程-9:Java的变量类型-8种基本类型和3种引用类型
- 引用变量的强制转换类型
- (转)定义接口类型的引用变量有什么好处?
- bash变量的间接引用
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?
- GCC通过变量的引用识别类型
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 变量的引用类型和非引用类型的区别
- matlab自学经验成果分享 判断变量是否为指定类型
- java中引用类型的变量和对象的区别
- 第三章:primitive主数据类型和引用-认识变量
- 临时变量不能作为非const类型引用形参的实参
- php入门变量之变量的间接引用、连接字符串和连接赋值运算符
- Java中的基本类型和引用类型变量的区别
- 无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
- 引用数据类型变量和基本数据类型变量