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

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

相关文章

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

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

Python之变量命名规则详解

《Python之变量命名规则详解》Python变量命名需遵守语法规范(字母开头、不使用关键字),遵循三要(自解释、明确功能)和三不要(避免缩写、语法错误、滥用下划线)原则,确保代码易读易维护... 目录1. 硬性规则2. “三要” 原则2.1. 要体现变量的 “实际作用”,拒绝 “无意义命名”2.2. 要让

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py