指定变量的类型及变量的间接引用

指定变量的类型: 使用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并不支持指针运算操作, 因此这极大的限制了间接引用的使用.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值