之前在搭建 SSH 环境时,遇到了这样一个问题:
使用命令:
eval$(ssh-agent)
去创建一个代理进程,但是会提示:No Such file or directory
。
就很纳闷,之前都用着好好的,为什么在新的环境中就不行了?
后来,了解到原来一直使用的 eval$(ssh-agent)
,其中的$()
原来在Linux
中有特殊的意义。
所以这篇笔记专门用来了解 eval
和 反引号
以及 $()
之间的区别。 它们的作用都是命令替换。
场景重现
1 | $ `ssh-agent` |
直到我输入 eval ssh-agent
时,似乎就对了。
命令代换
这三种不同的方式都是shell
脚本中的命令代换。
命令代换是指shell
能够将一个命令的标准输出插在一个命令行中任何位置。
eval
首先要介绍的是: eval
它的作用是:重新运算求出参数的内容。
该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。
1 | $ touch test.txt |
反引号与 $()
实例一:
1 | $ DATE1=$(date) |
实例二:
1 | $ echo `echo '\\'` |
暂时没太明白这三者的实际应用场景,不过了解到了 它们之间的一些区别与联系。