PATH=$PATH:`pwd`——执行此命令时会发生什么?

PATH=$PATH:`pwd`——执行此命令时会发生什么?

执行该命令后会发生什么情况?

PATH =$PATH:`pwd`

错误:当我在终端执行命令时什么也没有发生。

答案1

如果您执行问题中的命令,您应该会收到一条错误消息:

$ PATH =$PATH:`pwd`
bash: PATH: command not found

如果空格是拼写错误,并且您实际运行了此命令:

PATH=$PATH:`pwd`

然后,这将在当前 shell 会话期间(直到您关闭终端)将当前目录(pwd打印当前目录路径的命令,并将`pwd`替换为的输出pwd)添加到变量中。举例来说:PATH

$ pwd
/home/terdon/foo  ## I am in /home/terdon/foo

$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo

注意当前目录是如何/home/terdon/foo添加到变量末尾的PATH

答案2

错误

就你原来的命令而言, terdon 的回答已经很好地涵盖了正在发生的事情和应该发生的事情。让我们更详细地分析一下。

您要尝试执行的是变量赋值,其形式应为:

varName=value

但是,由于空格的原因,这被视为一个PATH带有命令行参数的命令,该命令由=变量的内容$PATH和命令替换组成pwd,所有这些都连接到同一个字符串中:

PATH =$PATH:`pwd`

当然,没有这样的命令PATH,因此您会收到错误。

Shell 将简单命令及其参数视为一个或多个空格分隔的标记列表(可能之前有可选的变量赋值)。换句话说,格式应该是:

[VAR=value] word [arg1 [arg2 [arg3] ]...]

当然,这并不是本案所期望的。

正确的命令

所以呢应该做的这是:

PATH=$PATH:`pwd`    

这里我们有适当的变量赋值,根据扩展顺序bashshell 首先会执行变量扩展,即$PATH用当前变量中的内容替换,然后在运行时执行命令替换pwd,并将其替换为 的输出pwd。最后,将所有内容分配回PATH变量。

几个关键的观察结果:

  • 由于这是变量赋值,因此您不需要引用$PATH变量,但通常应该这样做以避免不良行为。请参阅何时需要双引号
  • 命令替换的反引号形式是现在不推荐。在这个特殊情况下,这是可以的,但一般来说,反引号并不适合嵌套和多行命令。
  • PATHshell 使用变量来查找命令,列表中目录的顺序决定了搜索命令的优先级。例如,当你执行一个命令时,shell 首先会检查该命令是否内置,如果不是,那么它将查看PATH变量上的所有目录。PATH=$PATH:$(pwd)将使 shell 遍历其他所有内容,然后才到达 给出的目录pwd。 相比之下,PATH=$(pwd):$PATH将从 first 返回的目录开始搜索pwd。 因此赋值的顺序很重要。

相关内容