shell——eval exec
eval
# cat test.sh echo \$$# eval "echo \$$#" # sh test.sh a b c $3 c
shell的内建命令exec将并不启动新的shell,常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。
#cat test1.sh #!/bin/bash a=1 exec sh test2.sh echo $a #执行exec后不会执行这一句。 #cat test2.sh #!/bin/bash a=2 echo $a
不过,要注意一个例外,当exec命令来对文件描述符操作的时候,就不会替换shell,而且操作完成后,还会继续执行接下来的命令。
exec 3<&0 #将操作符3也指向标准输入 exec 6<>/tmp/fd6 echo aaa >&6 echo bbb >&6 cat /tmp/fd6 exec 6>&- #关闭fd6