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

2024-04-02 06:08

本文主要是介绍指定变量的类型及变量的间接引用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

指定变量的类型: 使用declare或者typeset


declare 或者typeset 内建命令(这两个命令是完全一样的)允许指定变量的具体类型.

declare/typeset选项

-r 只读


declare -r var1   
# 与readonly var1是一样的.

-i 整型


declare -i number
# 脚本会把变量"number"按照整形进行处理.number=3
echo "Number = $number"        # number = 3number=three
echo "Number = $number"        # number = 0# 脚本尝试把字符串"three"作为整数来求值(失败,所以出现值为0).

 如果把一个变量指定为整型的话, 那么即使没有expr或者let命令, 也允许使用特定的算术运算.


n=6/3
echo "n = $n"          # n = 6/3declare -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 () {fooecho $FOO
}
bar                 # 打印barfoo () {declare FOO="bar"
}
bar () {fooecho $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=zecho# 直接引用
echo "a = $a"          # a = letter_of_alphabet# 间接引用
eval a=\$$a
echo "Now a = $a"      # Now a = zexit 0

Bash并不支持指针运算操作, 因此这极大的限制了间接引用的使用.


这篇关于指定变量的类型及变量的间接引用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869172

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模