Shell脚本eval使用方法

eval用来在执行命令时作二次解析:主要是每次执行一个shell命令它会先检察一次,看到有$标志就会把值替换一次,然后再执行一遍。eval不会唤起起另一个shell来执行,而是在本身这个shell内多解析一次,所以替换的结果可以保留下来使用。

官方说明:

NAME

    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.

使用模式:eval [argument …]

功能描述:通过将给定的参数以一个空格为分隔符连接在一起构造出一条命令。构造出的命令会被 shell 读取并执行。

退出状态:如果没有参数,或者只有 null 参数,eval 将会返回退出状态(exit status)0;否则,它会返回 构造出的命令的 退出状态。

官方示例:

It will take an argument and construct a command of it, which will be executed by the shell. This is the example of the manpage:

1) foo=10 x=foo
2) y='$'$x
3) echo $y
4) $foo
5) eval y='$'$x
6) echo $y
7) 10

  1. In the first line you define $foo with the value '10' and $x with the value 'foo'.

  2. Now define $y, which consists of the string '$foo'. The dollar sign must be escaped with '$'.

  3. To check the result, echo $y.

  4. The result will be the string '$foo'

  5. Now we repeat the assignment with eval. It will first evaluate $x to the string 'foo'. Now we have the statement y=$foo which will get evaluated to y=10.

  6. The result of echo $y is now the value '10'.

使用示例:

#!/bin/bash
# eval.sh:example for eval

pages=4
#for ((i=1; i<=${pages}; i++))
for i in $(eval echo {1..${pages}})
do
echo $i
done

printf "%0.s-" {1..20}
#printf '%0.s-' $(seq 1 $variable)
echo

count=1
var1=I
var2=am
var3=a
var4=script
while [ $count -lt 5 ]; do
   eval "echo \$var$count"
   let 'count=count + 1'
done

# 输出结果:
1
2
3
4
--------------------
I
am
a
script

count会一直变化1 2 3...,同时替换var1 var2 var3,然后再对var1 var2 var3...取值。其中因为第一个var不想被运算,所以先用\构造一个变量, 然后第二次运算时才会被替换解析。当然如果要三次以上变量替换在一行内解析也是可行的。

$ eval ". foo.sh"eval还可以用来调用执行另一个shell脚本,脚本在同一个shell下执行,因此变量在此shell内都是有效的。


参考:

anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/3818.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注