《Linux运维总结:Shell脚本高级特性之变量间接调用》

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结


一、变量间接调用

在Shell脚本中,变量间接调用是一种高级特性,它允许你通过另一个变量的值来动态地访问另一个变量的值。这在处理复杂的脚本或需要灵活处理变量名称时非常有用。

使用eval时要特别小心,因为它会执行字符串中的所有内容,这可能导致安全风险。尽量避免在不完全控制输入的情况下使用eval。

!符号和declare -n是更安全、更推荐的方法,特别是当你需要处理复杂的变量引用时。在使用这些高级特性时,确保你的Bash版本支持这些功能(例如,declare -n需要Bash 4.3及以上版本)。可以通过运行bash --version来检查你的Bash版本。


1.1、方法一:使用eval命令

#!/bin/bash
export CPU_PLATFROM="aarch64"
export OS_NAME="kylin"
export API_SERVER_HOST="192.168.1.111"
export API_SERVER_PORT="6443"
var_arrs=(CPU_PLATFROM OS_NAME API_SERVER_HOST API_SERVER_PORT)for var in ${var_arrs[@]}
do  var2=`eval echo '$'"$var"`if [[ -z "${var2}" ]] ; thenecho "${var} is empty!"elseecho "${var} is $var2"fi
done

执行结果,如下所示:

root@k8s-master-58:~# ./check.sh 
2025-08-12 15:47:01 Info: CPU_PLATFROM is aarch64
2025-08-12 15:47:01 Info: OS_NAME is kylin
2025-08-12 15:47:01 Info: API_SERVER_HOST is 192.168.1.111
2025-08-12 15:47:01 Info: API_SERVER_PORT is 6443

1.2、方法二:使用!符号(Bash 4.2及以上版本)

#!/bin/bash
export CPU_PLATFROM="aarch64"
export OS_NAME="kylin"
export API_SERVER_HOST="192.168.1.111"
export API_SERVER_PORT="6443"
var_arrs=(CPU_PLATFROM OS_NAME API_SERVER_HOST API_SERVER_PORT)for var in ${var_arrs[@]}
dovar2="${!var}"if [[ -z "${var2}" ]] ; thenecho "${var} is empty!"elseecho "${var} is $var2"fi
done

执行结果,如下所示:

root@k8s-master-58:~# ./check.sh 
2025-08-12 15:47:01 Info: CPU_PLATFROM is aarch64
2025-08-12 15:47:01 Info: OS_NAME is kylin
2025-08-12 15:47:01 Info: API_SERVER_HOST is 192.168.1.111
2025-08-12 15:47:01 Info: API_SERVER_PORT is 6443

1.3、方法三:使用declare -n(Bash 4.3及以上版本)

#!/bin/bash
export CPU_PLATFROM="aarch64"
export OS_NAME="kylin"
export API_SERVER_HOST="192.168.1.111"
export API_SERVER_PORT="6443"
var_arrs=(CPU_PLATFROM OS_NAME API_SERVER_HOST API_SERVER_PORT)for var in ${var_arrs[@]}
dodeclare -n var2="$var"    if [[ -z "${var2}" ]] ; thenecho "${var} is empty!"elseecho "${var} is $var2"fi
done

执行结果,如下所示:

root@k8s-master-58:~# ./check.sh 
2025-08-12 15:47:01 Info: CPU_PLATFROM is aarch64
2025-08-12 15:47:01 Info: OS_NAME is kylin
2025-08-12 15:47:01 Info: API_SERVER_HOST is 192.168.1.111
2025-08-12 15:47:01 Info: API_SERVER_PORT is 6443

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:Linux运维实战总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92902.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABP VNext + Akka.NET:高并发处理与分布式计算

ABP VNext Akka.NET:高并发处理与分布式计算 🚀 用 Actor 模型把高并发写入“分片→串行化”,把锁与竞态压力转回到代码层面的可控顺序处理;依托 Cluster.Sharding 横向扩容,Persistence 宕机可恢复,Strea…

[激光原理与应用-250]:理论 - 几何光学 - 透镜成像的优缺点,以及如克服缺点

透镜成像是光学系统中应用最广泛的技术,其通过折射原理将物体信息转换为图像,但存在像差、环境敏感等固有缺陷。以下是透镜成像的优缺点及针对性改进方案:一、透镜成像的核心优点高效集光能力透镜通过曲面设计将分散光线聚焦到一点&#xff0…

测试匠谈 | AI语音合成之大模型性能优化实践

「测试匠谈」是优测云服务平台倾心打造的内容专栏,汇集腾讯各大产品的顶尖技术大咖,为大家倾囊相授开发测试领域的知识技能与实践,让测试工作变得更加轻松高效。 本期嘉宾介绍 Soren,腾讯TEG技术事业群质量工程师,负责…

用天气预测理解分类算法-从出门看天气到逻辑回归

一、生活中的决策难题:周末郊游的「天气判断」 周末计划郊游时,你是不是总会打开天气预报反复确认?看到 "25℃、微风、无雨" 就兴奋收拾行李,看到 "35℃、暴雨" 就果断取消计划。这个判断过程,其…

HTTPS服务

HTTPS服务 一、常见的端口 http ------ 80 明文 https ------ 443 数据加密 dns ------ 53 ssh ------ 22 telent ------ 23 HTTPS http ssl或者tls (安全模式) 二、原理: c(客户端…

【Android笔记】Android 自定义 TextView 实现垂直渐变字体颜色(支持 XML 配置)

Android 自定义 TextView 实现垂直渐变字体颜色(支持 XML 配置) 在 Android UI 设计中,字体颜色的渐变效果能让界面看起来更加精致与现代。常见的渐变有从左到右、从上到下等方向,但 Android 的 TextView 默认并不支持垂直渐变。…

CANopen Magic调试软件使用

一、软件安装与硬件连接1.1 系统要求操作系统:Windows 7/10/11 (64位)硬件接口:支持Vector/PEAK/IXXAT等主流CAN卡推荐配置:4GB内存,2GHz以上CPU1.2 安装步骤运行安装包CANopen_Magic_Setup.exe选择安装组件(默认全选&…

前端css学习笔记3:伪类选择器与伪元素选择器

本文为个人学习总结,如有谬误欢迎指正。前端知识众多,后续将继续记录其他知识点! 目录 前言 一、伪类选择器 1.概念 2.动态选择器(用户交互) 3.结构伪类 :first-child:选择所有兄弟元素的…

深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战

在数据处理和分析领域,PDF 文件常常包含丰富的文本、表格和图形信息。然而,从 PDF 中提取这些数据并非易事,尤其是当需要保留格式和颜色信息时。幸运的是,Python 社区提供了多个强大的库来帮助我们完成这项任务,其中最…

Springboot注册过滤器的三种方式(Order 排序)

一、使用 Component Order(简单但不够灵活) 适用于全局过滤器,无需手动注册,Spring Boot 会自动扫描并注册。 Component Order(1) // 数字越小,优先级越高 public class AuthFilter implements Filter {Autowired /…

电脑硬件详解

前几天我的风扇转的很快,而且cpu占用率很高,然后我在想怎么回事,然后就浅浅研究了一下电脑的硬件。 笔记本主板: 台式机主板: 图1: 图2: 电脑硬件详解 电脑的硬件是组成计算机系统的物理设…

力扣47:全排列Ⅱ

力扣47:全排列Ⅱ题目思路代码题目 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 思路 又是任意顺序和所有不重复的排列,显而易见我们要使用回溯的办法。 首先是回溯的结束条件即新数组的长度等于nums的长度。这道题的难点…

学习笔记091——如何实现web登录时,密码复杂度校验?(后端)

1、创建工具类 /*** 密码复杂度校验* param password 密码*/ public static void validatePassword(String password) {// 至少8位if (password.length() < 8) {throw new IllegalArgumentException("密码长度至少为8位");}// 包含大小写字母if (!password.matche…

雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

一、前言在日趋复杂的分布式系统中&#xff0c;数据量越来越大&#xff0c;数据库分库分表是一贯的垂直水平做法&#xff0c;但是需要一个全局唯一ID标识一条数据或者MQ消息&#xff0c;数据库id自增就显然不能满足要求了。因为场景不同&#xff0c;分布式ID需要满足以下几个条…

【PCB设计经验】去耦电容如何布局?

0805 和 0603 以及更小 封装的电容用作于对中高频的去耦,其摆放位置是有要求的: 一、建议尽可能的靠近主控芯片的 电源管脚放置。 二、使用较宽和短的引线连接到电源和地过孔可以采用如下 图 4–1 中的图 ( 2 )、( 3)、 ( 4 )任意一种方式,避免使用长线或者较细的…

自动化运维实验

目录 一、实验拓扑 二、实验目的 三、实验步骤 实验思路&#xff1a; 代码部分&#xff1a; 四、实验结果&#xff1a; 一、实验拓扑 二、实验目的 利用python脚本&#xff0c;在本地&#xff0c;或者虚拟机里实现&#xff0c;设备CRC数量统计&#xff0c;并输出成表格 三、实验…

Wed前端第二次作业

一、作业1&#xff1a;完成自己学校的官网&#xff0c;动忘内容直接贴&#xff0c;至少三个不同的页面1、界面1&#xff08;1&#xff09;相关代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

第5节 大模型分布式推理通信优化与硬件协同

前言 在分布式推理中,多设备(如GPU、CPU)之间的数据传输(通信)是连接计算的“桥梁”。如果通信效率低下,即使单设备计算能力再强,整体性能也会大打折扣。想象一下:如果工厂之间的物流卡车跑得比生产速度还慢,再多的工厂也无法提高整体产量。 本节将从最基础的单设备内…

XGBoost 的适用场景以及与 CNN、LSTM 的区别

XGBoost 的核心优势与适用场景XGBoost 是一种梯度提升决策树算法&#xff0c;属于集成学习方法。它在处理结构化/表格化数据方面表现极其出色&#xff0c;是 Kaggle 竞赛和工业界广泛应用的“冠军”模型。其核心优势和应用场景包括&#xff1a;1. 结构化/表格化数据数据形式&a…

快速设计简单嵌入式操作系统(3):动手实操,基于STC8编写单任务执行程序,感悟MCU指令的执行过程

引言 前面我们陆续学习了操作系统常见的基础概念&#xff0c;接着简单了解了一下8051单片机的内存结构和执行顺序切换的相关概念。接下来&#xff0c;我们就开始进行实操&#xff0c;基于8051单片机STC8来编写一个简单的操作系统&#xff0c;这里我们先实现一个单任务的执行程…