search
HomeOperation and MaintenanceLinux Operation and MaintenanceDetailed explanation of how to use the eval command in Linux

The eval command will first scan the command line for all substitutions, similar to macro substitution in C language, and then execute the command. This command is used for variables whose functions cannot be achieved by one scan. This command scans the variables twice. These variables that require two scans are sometimes called complex variables.

Create a new file test, write the string "HelloWorld!" into the file, and assign cat test to the variable WORD. If we echo WORD, it cannot be reached. The content in test; however, eval WORD can display the content in the file because the eval command scans the following commands twice. The first time it replaces WORD with cat test, and the second time it executes cat test.



##2.eval can also be used to write back simple variables , not necessarily a complex variable.
NAME=ZONE
eval echo $NAME is equivalent to echo $NAME

3. eval command You can also get the last parameter passed to the shell
If we know the number of parameters, and we want to view the content of the last parameter, we can use echo to display it directly, such as entering first For the last two parameters, we can use echo $2 to view the last parameter;

但是,如果我们不知道参数个数还想查看最后一个参数内容该怎么办呢?这是我们就想到使用 $$#为传给shell脚本的参数个数,但是上例中 echo “$$#”后显示的其实是参数个数,而使用eval echo “$$#”才显示最后一个参数的内容。 



对上述第3点补充:   
    今天学习eval命令时,发现了这个问题:   
    echo "Last argument is $(eval echo \$$#)" a b c d e   
    这句话本意打印:Last argument is e   
    但实际打印的是:Last argument is -bash a b c d e   
   
    $#一般用在脚本中的,用在命令行的话就要先使用set设置位置参数,因此修改为如下:   
    set - a b c d e   
    echo "Last argument is $(eval echo \$$#)"   
    Last argument is e   
   
    set - a b c d e f   
    echo "Last argument is $(eval echo $#)"   
    Last argument is 6

4、条件筛选 

在file文件中写入两列数据,第一列对应KEY 、第二列为VALUE,使用eval命令将KEY与VALUE的值对应起来,从文件中读取 

eval进阶:

    1.shell 也提供了 eval 命令,如同熟悉的其他脚本语言,会将它的参数做为命令执行,初看会疑惑为什么shell要提供两种动态执行命令字串的机制,但是经过仔细分析,才发现shell的eval同其他语言有很大区别。
    2.shell 中的 eval
        2.1 不能获得函数处理结果 ,如1所说,所有命令,函数的处理结果只能通过 ``来获得,那么其它语言中利用eval来获得动态生成代码执行后的输出变得不可能。
        2.2 eval 嵌套无意义 ,在其他语言中可以通过 eval(eval("code")),来执行(执行动态生成的code的返回),而由于shell 中 eval 将后面的eval命令简单当作命令字符串执行,失去了嵌套作用,嵌套被命令替换取代。

eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。我举两个例子,抛砖引玉.

例子1:用eval技巧实现shell的控制结构for

[root@home root]# cat myscript1    
QUOTE:    
#!/bin/sh    
evalit(){    
        if [ $cnt = 1 ];then    
                eval $@    
                return    
        else    
                let cnt="cnt-1"    
                evalit $@    
        fi    
        eval $@    
}    
cnt=$1    
echo $cnt | egrep "^[1-9][0-9]*$" >/dev/null    
if [ $? -eq 0 ]; then    
        shift    
        evalit $@    
else    
        echo 'ERROR!!! Check your input!'    
fi    
[root@home root]# ./myscript1 3 hostname    
home    
home    
home    
[root@home root]# ./myscript1 5 id |cut -f1 -d' '    
uid=0(root)    
uid=0(root)    
uid=0(root)    
uid=0(root)    
uid=0(root)    
注意:bash里有两个很特殊的变量,它们保存了参数列表。    
    
$*,保存了以$IFS指定的分割符所分割的字符串组。    
$@,原样保存了参数列表,也就是"$1""$2"...

这里我使用了函数递归以及eval实现了for结构。
当执行eval $@时,它经历了步骤如下:
第1步,分割成eval $@
第6步,扩展$@为hostname
第11步,找到内置命令eval
重复一次命令行处理,第11步,找到hostname命令,执行。

注意:也许有人想当然地认为,何必用eval呢?直接$@来执行命令就可以了嘛。

例子2:一个典型错误的例子


If the command line is complex (including pipes or other characters), directly executing the contents of the $a string will Something went wrong. analyse as below.
#$a is processed in parameter expansion, that is to say, pipeline analysis is skipped, so "|", "cut", "-f1", "-d" all become It became the parameter of the id command, and of course something went wrong.
But eval is used, which processes the "id", "|", "cut", "-f1", "-d" strings obtained from the first command line processing again. Command line processing, this time the pipeline can be analyzed correctly.
In short: Make sure that your command or script design can be processed correctly through the command line. Skipping any step may cause unexpected errors!

Related recommendations:

The use of eval in JavaScript Detailed explanation

Detailed explanation of eval() function return value and variable environment usage examples in JavaScript

Detailed explanation of how JavaScript uses the eval() function to calculate JavaScript string instances

The above is the detailed content of Detailed explanation of how to use the eval command in Linux. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
The 5 Core Components of the Linux Operating SystemThe 5 Core Components of the Linux Operating SystemMay 08, 2025 am 12:08 AM

The five core components of the Linux operating system are: 1. Kernel, 2. System libraries, 3. System tools, 4. System services, 5. File system. These components work together to ensure the stable and efficient operation of the system, and together form a powerful and flexible operating system.

The 5 Essential Elements of Linux: ExplainedThe 5 Essential Elements of Linux: ExplainedMay 07, 2025 am 12:14 AM

The five core elements of Linux are: 1. Kernel, 2. Command line interface, 3. File system, 4. Package management, 5. Community and open source. Together, these elements define the nature and functionality of Linux.

Linux Operations: Security and User ManagementLinux Operations: Security and User ManagementMay 06, 2025 am 12:04 AM

Linux user management and security can be achieved through the following steps: 1. Create users and groups, using commands such as sudouseradd-m-gdevelopers-s/bin/bashjohn. 2. Bulkly create users and set password policies, using the for loop and chpasswd commands. 3. Check and fix common errors, home directory and shell settings. 4. Implement best practices such as strong cryptographic policies, regular audits and the principle of minimum authority. 5. Optimize performance, use sudo and adjust PAM module configuration. Through these methods, users can be effectively managed and system security can be improved.

Linux Operations: File System, Processes, and MoreLinux Operations: File System, Processes, and MoreMay 05, 2025 am 12:16 AM

The core operations of Linux file system and process management include file system management and process control. 1) File system operations include creating, deleting, copying and moving files or directories, using commands such as mkdir, rmdir, cp and mv. 2) Process management involves starting, monitoring and killing processes, using commands such as ./my_script.sh&, top and kill.

Linux Operations: Shell Scripting and AutomationLinux Operations: Shell Scripting and AutomationMay 04, 2025 am 12:15 AM

Shell scripts are powerful tools for automated execution of commands in Linux systems. 1) The shell script executes commands line by line through the interpreter to process variable substitution and conditional judgment. 2) The basic usage includes backup operations, such as using the tar command to back up the directory. 3) Advanced usage involves the use of functions and case statements to manage services. 4) Debugging skills include using set-x to enable debugging mode and set-e to exit when the command fails. 5) Performance optimization is recommended to avoid subshells, use arrays and optimization loops.

Linux Operations: Understanding the Core FunctionalityLinux Operations: Understanding the Core FunctionalityMay 03, 2025 am 12:09 AM

Linux is a Unix-based multi-user, multi-tasking operating system that emphasizes simplicity, modularity and openness. Its core functions include: file system: organized in a tree structure, supports multiple file systems such as ext4, XFS, Btrfs, and use df-T to view file system types. Process management: View the process through the ps command, manage the process using PID, involving priority settings and signal processing. Network configuration: Flexible setting of IP addresses and managing network services, and use sudoipaddradd to configure IP. These features are applied in real-life operations through basic commands and advanced script automation, improving efficiency and reducing errors.

Linux: Entering and Exiting Maintenance ModeLinux: Entering and Exiting Maintenance ModeMay 02, 2025 am 12:01 AM

The methods to enter Linux maintenance mode include: 1. Edit the GRUB configuration file, add "single" or "1" parameters and update the GRUB configuration; 2. Edit the startup parameters in the GRUB menu, add "single" or "1". Exit maintenance mode only requires restarting the system. With these steps, you can quickly enter maintenance mode when needed and exit safely, ensuring system stability and security.

Understanding Linux: The Core Components DefinedUnderstanding Linux: The Core Components DefinedMay 01, 2025 am 12:19 AM

The core components of Linux include kernel, shell, file system, process management and memory management. 1) Kernel management system resources, 2) shell provides user interaction interface, 3) file system supports multiple formats, 4) Process management is implemented through system calls such as fork, and 5) memory management uses virtual memory technology.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use