《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
英文地址,請注明出處:http://en.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;這里我們先實現一個單任務的執行程…