Linux 命令之 eval -- 对参数执行两次解释

文章目录

  • 一、命令介绍
  • 二、选项参数
  • 三、命令示例
    • (一)输出文件的内容
    • (二)统计当前目录下的文件总数
    • (三)输出变量的值及给变量赋值

一、命令介绍

功能说明:重新运算求出参数的内容。
命令语法:eval [参数]
命令参数:参数不限数目,彼此之间用分号分开,参数通常是一条命令行(command-line)
补充说明:eval(evaluate) 可读取一连串的参数,然后再依参数本身的特性来执行。

eval 第 1 次扫描(解释)参数,如果参数中含有变量则替换成变量值,如果有转义符则完成转义;接着再扫描第 2 次参数,这次会依据参数本身的含义来执行,比方说,参数是一个 shell 命令,则会执行该命令。

eval 主要用在对参数的特殊处理上面的,一般的命令行,shell 处理参数就只执行一遍,像转义和变量转变;但加上 eval 后就可以对参数做两遍处理;一个 eval 只能使 shell 对参数多一次处理,因此有几个 eval 就可以多加几次,即 eval eval command-line 这样就能对参数进行三次编译,但此时应特别注意参数的转义,

二、选项参数

后面再整理了…

三、命令示例

(一)输出文件的内容

文件 test.txt 中的内容:

hello shell world!

声明定义变量 myfile:

[root@htlwk0001host ~]# myfile="cat test.txt" 

直接执行命令 echo:

[root@htlwk0001host ~]# echo $myfile
cat text.txt

加上 eval 后再执行:

[root@htlwk0001host ~]# eval $myfile
hello shell world!

说明:
第 1 次扫码,获取变量 myfile 的值进行替换,结果就是:eval echo cat text.txt
第 2 次扫码,就是按 eval 后面的参数本身的含义来运行,发现 2 个命令:echocat,于是先执行 cat 得到结果:hello shell world!,再执行命令 echo 输出后面的内容到标准输出,结果就是:hello shell world!

注意下面这个命令行:

[root@htlwk0001host ~]# eval echo $myfile
cat text.txt

说明:
eval 是进行二次命令行解析,不是执行两次命令。在命令开始执行之前,命令行会先进行解析。eval echo $myfile 第一轮命令行解析,将变量替换掉,得到 eval echo cat text.txt,然后执行 eval 命令,eval 命令使得它后面的参数当成外部输入的命令行,即相当于你再次单独输入echo cat text.txt,于是再次进行命令行的解析,但这次没什么特殊符号是需要解析的,所以解析完成后得到的命令仍然是 echo cat text.txt,然后开始执行 echo 命令。如果想要得到你期望的结果,输出 hello shell world,那么应该 eval $myfile,这样第一轮变量替换之后得到 eval cat test.txteval 命令开始执行,于是对它的参数部分 cat test.txt 进行第二次命令行解析,但是这次没有什么特殊符号需要解析的,最终执行cat 命令。

(二)统计当前目录下的文件总数

[root@htlwk0001host test]# pipe="|"
[root@htlwk0001host test]# echo $pipe
|
[root@htlwk0001host test]# eval ls $pipe wc -l
13

注:
eval 会对后面的参数(就是这串 ls $pipe wc -l)解释两次(有人说扫描两次,意思差不多吧!),第一次就是把变量 pipe 替换成对应的值,第二次才真正地执行 eval 后面的命令。

shell1 次扫描命令行时,它替换出 pipe 的值 |,接着 eval 让 shell 再次扫描命令行,这时 shell| 作为管道符号了,并真正地执行 eval 后面的 shell 命令。

(三)输出变量的值及给变量赋值

[root@htlwk0001host test]# x=100 
[root@htlwk0001host test]# ptrx=x
[root@htlwk0001host test]# eval echo \$$ptrx 
100
[root@htlwk0001host test]# eval $ptrx=50 
[root@htlwk0001host test]# echo $x
50

注:

  1. 1 次解释 eval 后面的命令串 echo \$$ptrx\$ 转义后得到普通的字符 $$ptrx 被替换成对应的值,即 x,所以经过第 1 次解释后得到的命令行串是 echo $x,但是第 1 次 不会去 eval 后面的命令;第 2 次才真正去解释执行命令,于是输出变量 x 的值,即 100
  2. 1 次解释 eval 后面的命令串 $ptrx=50$ptrx 被替换成对应的值,即 x,得到的命令串是 x=50,第 2 次才真正解释执行,所以就是给变量 x 赋值 50,最后 echo $x 的输出结果就是 50

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

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

相关文章

设置图像的title_【HTML】2 图像标签和属性

1、图像标签和属性图像标签&#xff1a;<img>标签引入外部图片文件&#xff0c;并进行显示&#xff0c;单标签&#xff0c;不需要成对出现。属性&#xff1a;属于标签的特性。标签要通过属性来定义所希望的设置参数。2、应用案例<!DOCTYPE html> <html lang&quo…

jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述

jvm体系结构概述各位读者好&#xff01; 在本教程中&#xff0c;我们将了解和学习Java虚拟机&#xff08;JVM&#xff09;及其体系结构。 本教程将帮助您正确回答以下问题&#xff1a; Java中的JVM是什么&#xff1f; JVM的不同组件 JVM&#xff0c;JRE和JDK之间的区别 1.简…

Linux 命令之 declare -- 声明或显示 shell 变量

文章目录一、命令介绍二、命令格式三、命令选项四、命令示例&#xff08;一&#xff09;声明变量并赋值&#xff08;二&#xff09;将变量设置为环境变量&#xff08;三&#xff09;将变量设置为只读&#xff0c;不可修改&#xff08;四&#xff09;将变量声明为整数并进行计算…

mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记

以下内容是学习《MySQL数据库应用 从入门到精通》过程中总结的一些内容提要&#xff0c;供以后自己复现使用。一&#xff1a;数据库查看所有数据库:SHOW DATABASES创建数据库:CREATE DATABSE database_name切换数据库:USE database_name删除数据库:DROP DATABASE database_name…

Linux 命令之 env -- 显示系统的环境变量,定义执行命令时的环境变量

文章目录一、命令介绍二、选项参数三、命令示例&#xff08;一&#xff09;显示系统的环境变量&#xff08;二&#xff09;从当前环境中删除指定的变量&#xff08;三&#xff09;定义指定的环境变量&#xff08;四&#xff09;在一个修改后的环境下执行命令一、命令介绍 env命…

aws lambda_跑来跑去:假人与AWS Lambda的第一次接触

aws lambda这一切始于埃及人在一个木框上滑动几块大理石以简单的算术使其大脑放松的时候。 或许是希腊人发明了Antikythera机制来追踪行星的运动至每千年2度的精度 。 无论哪种方式&#xff0c;计算都已经走了很长一段路&#xff1a;查尔斯巴贝奇的分析引擎 &#xff0c;艾伦图…

Linux 命令之 set -- 显示或设置 shell 特性及 shell 变量

文章目录一、命令介绍二、选项参数三、命令示例&#xff08;一&#xff09;开启/关闭特性&#xff08;二&#xff09;将普通变量设为环境变量一、命令介绍 set 命令作用主要是显示系统中已经存在的 shell 变量&#xff0c;设置 shell 变量的新变量值&#xff0c;可以把已有的变…

Linux 命令之 unset -- 删除指定的shell变量或函数

文章目录一、命令介绍二、选项参数三、命令示例&#xff08;一&#xff09;删除指定的环境变量一、命令介绍 unset 为 shell 内建指令&#xff0c;用于删除已定义的shell变量&#xff08;包括环境变量&#xff09;和shell函数。unset命令不能够删除具有只读属性的shell变量和环…

带有Jersey的RESTful Web服务的JAX-RS教程

在当今世界&#xff0c;数据起着非常重要的作用。 如此众多的应用程序将各种类型的数据用于不同的操作&#xff0c;所以最重要的方面是应用程序之间的通信。 当应用程序之间可以通信时&#xff0c;数据共享变得容易。 就像在亚洲运行的应用程序向在欧洲运行的应用程序提供数据…

mysql --force -f_Mysql_mysql force Index 强制索引

其他强制操作&#xff0c;优先操作如下&#xff1a;mysql常用的hint对于经常使用oracle的朋友可能知道&#xff0c;oracle的hint功能种类很多&#xff0c;对于优化sql语句提供了很多方法。同样&#xff0c;在mysql里&#xff0c;也有类似的hint功能。下面介绍一些常用的。强制索…

Linux 查看文件位置/查看文件路径的命令

which 查看可执行文件的位置find 实际搜寻硬盘查询文件名称whereis 查看文件的位置locate 配合数据库查看文件的位置

抽象工厂模式设计模式_创新设计模式:抽象工厂模式

抽象工厂模式设计模式抽象工厂模式是一种创新模式&#xff0c;是与构建器和工厂模式一起最受欢迎的模式之一。 使用创建模式是为了创建对象&#xff0c;而不是直接使用构造函数创建对象。 抽象工厂模式提供了一种封装一组具有共同主题的单个工厂而无需指定其具体类的方法。 采…

dubbo protocol port 消费者端_Dubbo源码:搞定URL,就走完了进度条的一半

Dubbo 中的 URL大家都知道&#xff0c;在互联网领域&#xff0c;每个信息资源都有统一的且在网上唯一的地址&#xff0c;该地址就叫 URL&#xff08;Uniform Resource Locator&#xff0c;统一资源定位符&#xff09;&#xff0c;它是互联网的统一资源定位标志&#xff0c;也就…

swarm 容器_Oracle应用容器云上的WildFly Swarm

swarm 容器在此博客文章中&#xff0c;我将描述如何将打包在WildFly Swarmber -jar中的CloudEE Duke应用程序部署到Oracle Application Container Cloud 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-j…

mysql数据库文件还原数据库_MySql通过数据库文件恢复数据库

以表”Table”为例:如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中.如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况)&#xff0c;结构文件存在于table_name.fr…

yum 如何知道从哪里下载包?

包来自什么地方呢&#xff1f;yum 如何知道从哪里下载包&#xff1f;起点是 /etc/yum.repos.d/ 目录&#xff0c;这个目录常常包含几个 repo 文件。这是 repo 的默认位置&#xff0c;但是可以在 YUM 配置文件&#xff08;通常是 /etc/yum.conf&#xff09;中指定其他位置。清单…

mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL

mysql主从配置的参数配置与步骤_MySQL主从配置的步骤&#xff1a;在主库建立要同步的数据库,建立主库的帐号和修改主备库配置create database web default character set utf8grant replication slave on *.* to repdcssub192.168.191.112 identified by 123456;grant all priv…

javascript 解密_Javascript中的AES加密和Java中的解密

javascript 解密AES代表高级加密系统&#xff0c;它是一种对称加密算法&#xff0c;很多时候我们需要在客户端加密一些纯文本&#xff0c;例如密码&#xff0c;然后将其发送到服务器&#xff0c;然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台&#xff0…

英文标点符号大全

标点符号英文中文名称未知反撇号’apostrophe撇号&#xff0c;缩写及所有格符号plus加号&#xff1b;正号-minus减号&#xff1b;负号plus or minus正负号is multiplied by乘号is divided by除号&#xff1d;is equal to等于号≠is not equal to不等于号≡is equivalent to全等…

Linux 系统下显示文件内容(查看文件内容)的命令 more/less/cat/head/tail 比较

命令说明more建议用于查看内容较长的文本文件&#xff0c;内容可以分屏显示&#xff0c;并且支持在显示时定位关键字cat建议用于查看内容较少的文本文件。当文件较大时&#xff0c;文本在屏幕上迅速闪过&#xff08;滚屏&#xff09;&#xff0c;用户往往看不清所显示的内容。因…