Linux shell編程學習筆記34:eval 命令

0?前言

在JavaScript語言中,有一個很特別的函數eval,eval函數可以將字符串當做 JavaScript 代碼執行,返回表達式或值。

在Linux Shell 中也提供了內建命令eval,它是否具有JavaScript語言中eval函數的功能呢?

1 eval命令的格式、功能和返回值

我們可以使用 help eval命令來查看eval命令的幫助信息。

purpleEndurer @ bash ~ $ help eval
eval: eval [arg ...]
? ? Execute arguments as a shell command.
? ??
? ? Combine ARGs into a single string, use the result as input to the shell,
? ? and execute the resulting commands.
? ??
? ? Exit Status:
? ? Returns exit status of command or success if command is null.

1.1?eval命令的格式

eval [參數...]

參數說明:參數不限數目,彼此之間用分號分開。

1.2 eval?命令的功能

將參數作為 shell 命令執行。

確切來說,是將參數組合成一個字符串,將結果用作 shell 的輸入,并執行生成的命令。

1.3 eval命令的返回值

  • 如果沒有參數,eval返回成功(0)。
  • 如果有參數,eval返回參數作為命令執行后的退出狀態。

2 eval 命令用法實例

2.1 eval不帶參數

purpleEndurer @ bash ~ $ eval
purpleEndurer @ bash ~ $ echo $?
0

?

?

2.2??eval簡單回顯

purpleEndurer @ bash ~ $ echo $0
bash
purpleEndurer @ bash ~ $ eval echo $0
bash

可見?命令?eval echo $0 和? echo $0?的功能是一樣的。

2.3?利用eval命令執行其它命令

我們把命令 echo hello?賦值給變量c,再用eval命令來這個命令:

purpleEndurer @ bash ~ $ c="echo hello"
purpleEndurer @ bash ~ $ eval $c
hello

2.4?利用eval命令執行函數

我們先定義3個函數a1、a2、a3

function a1()
{echo a1; #顯示 a1
}function a2()
{echo a2; #顯示 a2
}function a3()
{echo a3; #顯示 a3
}

2.4.1 用for循環調用eval命令來執行它們

purpleEndurer @ bash ~ $ function a1(){ echo a1; }; function a2(){ echo a2; }; function a3(){ echo a3; }
purpleEndurer @ bash ~ $ for i in {1..3}; do eval a${i}; done
a1
a2
a3
purpleEndurer @ bash ~ $?

?

2.4.2?根據用戶輸入的數字執行相應的函數

purpleEndurer @ bash ~ $ ?function a1(){ echo a1; }; function a2(){ echo a2; }; function a3(){ echo a3; }
purpleEndurer @ bash ~ $ echo -n enter 1 or 2 or 3:; read i; eval a${i}
enter 1 or 2 or 3:1
a1
purpleEndurer @ bash ~ $ echo -n enter 1 or 2 or 3:; read i; eval a${i}
enter 1 or 2 or 3:3
a3
purpleEndurer @ bash ~ $ echo -n enter 1 or 2 or 3:; read i; eval a${i}
enter 1 or 2 or 3:4
bash: a4: command not found
purpleEndurer @ bash ~ $?

?只要我們輸入1或2或3,就可以相應地執行a1、a2或a3,輸入其它數字則出錯。

2.5?在腳本中獲取最后一個命令行參數

我們先用cp /dev/stdin a.sh命令創建腳本a.sh,內容如下:

echo "\$$#" ? ? ? ??
eval echo "\$$#"

purpleEndurer @ bash ~ $ cp /dev/stdin a.sh
echo "\$$#" ? ? ? ??
eval echo "\$$#"
purpleEndurer @ bash ~ $ . a.sh 1 2 3
$3
3
purpleEndurer @ bash ~ $?

我們直接使用命令echo "\$$#",顯示出來的是?$3

我們使用eval echo "\$$#",將最后一個參數3正確顯示出來了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212555.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPIO的使用--USART串口通信--傳感器控制數據

目錄 一、串口通信 1、概念 2、原理圖 3、使用步驟 (1)尋找串口位置 (2)確定引腳編號 (3)編寫代碼 4、實驗結果 實驗代碼 main.c usart.c usart.h 一、串口通信 1、概念 串行接口是一種可以將…

DiffiT

本文首發于AIWalker,歡迎關注。 https://arxiv.org/abs/2312.02139 https://github.com/NVlabs/DiffiT 擴散模型以其強大的表達能力和高樣本質量在許多領域得到了新的應用。對于樣本生成,這些模型依賴于通過迭代去噪生成圖像的去噪神經網絡。然而&#x…

SAP UI5 walkthrough step8 Translatable Texts

在這個章節,我們會將一些文本常量獨立出一個資源文件 這樣的話,可以方便這些文本常量被翻譯成任意的語言 這種國際化的操作,我們一般命名為i18n 新建一個文件i18n.properties webapp/i18n/i18n.properties (New) showHelloButtonTextSay …

vue3項目實現文檔 JSON 格式和 Excel 表格的在線預覽,(智能搜索,未驗證)

若要實現文檔 JSON 格式和 Excel 表格的在線預覽,你可以使用第三方庫來實現。對于文檔 JSON 格式,你可以使用 vue-json-pretty 庫來展示美觀的 JSON 數據;對于 Excel 表格,你可以使用 vue-excel-viewer 庫來完成在線預覽。下面是一…

Java、Spring Boot和事務管理

引言 在現代應用程序開發中,確保數據的一致性和可靠性是至關重要的。Java作為一種強大的編程語言,通過其廣泛的生態系統和強大的庫支持,為開發人員提供了構建高性能應用程序的豐富工具。Spring Boot是一個基于Spring框架的項目,它…

圖像的均方差和信噪比計算

圖像的均方差和信噪比計算 一、均方差1、公式2、代碼 二、信噪比1、公式2、代碼 圖像的均方差和信噪比公式及代碼,代碼基于opencv和C實現。 一、均方差 均方誤差,英文簡稱:MSE,英文全稱:“Mean Square Error”。 衡量…

接口測試-Jmeter使用

一、線程組 1.1 作用 線程組就是控制Jmeter用于執行測試的一組用戶 1.2 位置 右鍵點擊‘測試計劃’-->添加-->線程(用戶)-->線程組 1.3 特點 模擬多人操作線程組可以添加多個,多個線程組可以并行或者串行取樣器(請求)和邏輯控制器必須依賴線程組才能…

「Verilog學習筆記」多bit MUX同步器

專欄前言 本專欄的內容主要是記錄本人學習Verilog過程中的一些知識點,刷題網站用的是牛客網 輸入數據暫存在data_reg中,使能信號data_en用打兩拍的方式跨時鐘域傳輸到時鐘域B,最后data_out根據使能信號更新數據。data_en信號在A時鐘域用一個D…

Redis | Redis入門學習介紹及常見原理剖析

關注wx:CodingTechWork Redis介紹 概述 Redis是NoSQL,是key-value分布式內存數據庫。 緩存 緩存是將數據從慢的介質換到快的介質上,提高讀寫效率和性能,并降低數據庫的讀寫成本。內存的速度一般都遠遠大于硬盤的速度&#xf…

三個臭皮匠(ctr,nerdctl,crictl)頂一個諸葛亮(docker)

文章目錄 containerd簡介 nerdctl簡介安裝精簡 Minimal 安裝完整Full 安裝啟動服務 命令參數容器運行容器列出容器詳情容器日志容器進入容器停止容器刪除鏡像列表鏡像拉取鏡像標簽鏡像導出鏡像導入鏡像刪除鏡像構建配置tab鍵配置加速配置倉庫http方式https方式 ctr簡介命令參數…

12、虛函數的應用、虛析構函數

12、虛函數的應用、虛析構函數 運行時類型信息(RTTI)動態類型轉換(dynamic_cast)typeid操作符 虛 析構函數空虛析構函數 一個類中,除了構造函數和靜態成員函數外,任何函數都可以被聲明為虛函數 運行時類型信息(RTTI) 動態類型轉換(dynamic_cast) 用于…

AMC8美國數學競賽歷年真題集在線練習操作指南和2024年備考建議

今天是2023年12月10日,距離2024年的AMC8美國數學競賽的舉辦還有40天時間。據六分成長了解,有一些孩子報名參加了AMC8的機構培訓班系統學習,也有一些孩子選擇了自己自學備考。 有家長問AMC8的培訓是否一定要參加機構的培訓班學習?…

基于SpringBoot+thymeleaf協同過濾算法山河旅游推薦系統(Java畢業設計)

大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

windows端口被占用怎么辦 怎么關閉那個占用的端口

目錄 這是出現的情況怎么解決了1.請打開這玩意2.輸入下面---查詢 先關端口的信息根據id獲得服務 上圖的8888 對應的ip 上圖就是134243.殺死進程134244.重啟服務 這是出現的情況 怎么解決了 1.請打開這玩意 2.輸入下面—查詢 先關端口的信息 netstat -ano過濾信息查詢想要的端…

JavaScript將函數作為參數傳入

其他函數中,是一種常見的編程技巧,稱為回調函數。在 JavaScript 中,函數被視為一等公民,也就是說,它們可以像任何其他類型的值一樣被傳遞、分配和操作。 示例: function greet(name) {console.log(Hello …

央企國企相關

文章目錄: 一:央企國企的區別 二:分類 三:相關 1.考什么 2.有什么崗位 3.什么時候考 4.去哪里報名和查看信息 5.喜歡招聘什么專業 6.其他疑問 一:央企國企的區別 央企國企一共有47萬多個(央企131個…

【8.0.34-0 ubuntu 安裝Mysql 后無法鏈接是什么情況】

8.0.34-0 ubuntu 安裝Mysql 后無法鏈接是什么情況 檢查日志解決辦法 檢查日志 如果檢查一下帳號密碼沒問題看一下日志: Plugin mysql_native_password reported: mysql_native_password is deprecated and will be removed in a future release. Please use cachi…

java中的context對象?

java中的context對象? 大家好,我是微賺淘客系統的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天,我們將深入研究Java中的神秘利器——Context對象。在Java開發中,Context對象扮演著重要的角…

排序算法之六:快速排序(遞歸)

快速排序的基本思想 快速排序是Hoare于1962年提出的一種二叉樹結構的交換排序方法 其基本思想為: 任取待排序元素序列中的某元素作為基準值,按照該排序碼將待排序集合分割成兩子序列,左子序列中所有元素均小于基準值,右序列中所…

《深入理解計算機系統》學習筆記 - 第四課 - 浮點數

Floating Point 浮點數 文章目錄 Floating Point 浮點數分數二進制示例能代表的數浮點數的表示方式浮點數編碼規格化值規格化值編碼示例 非規格化的值特殊值 示例IEEE 編碼的一些特殊屬性四舍五入,相加,相乘四舍五入四舍五入的模式二進制數的四舍五入 浮…