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

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中解决循环引用问题的几种方法,包括延迟导入、使用`importlib`、重构代码和类型提示的前向引用,这些方法可以帮助开发者避免导入循环导致的... 目录模拟循环引用解决python循环引用的方法有几种,以下是一些常见的解决android方案常见问题

Java 接口定义变量的示例代码

《Java接口定义变量的示例代码》文章介绍了Java接口中的变量和方法,接口中的变量必须是publicstaticfinal的,用于定义常量,而方法默认是publicabstract的,必须由实现类... 在 Java 中,接口是一种抽象类型,用于定义类必须实现的方法。接口可以包含常量和方法,但不能包含实例

C++ 右值引用(rvalue references)与移动语义(move semantics)深度解析

《C++右值引用(rvaluereferences)与移动语义(movesemantics)深度解析》文章主要介绍了C++右值引用和移动语义的设计动机、基本概念、实现方式以及在实际编程中的应用,... 目录一、右值引用(rvalue references)与移动语义(move semantics)设计动机1

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

python中的鸭子类型详解

《python中的鸭子类型详解》鸭子类型是Python动态类型系统的灵魂,它通过强调“行为”而非“类型”,赋予了代码极大的灵活性和表现力,本文给大家详细介绍python中的鸭子类型,感兴趣的朋友一起看... 目录1. 核心思想:什么是鸭子类型?2. 与“传统”静态类型语言的对比3. python 中无处不在

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象