• 本页内容

50. hash


bash shell 有一个哈希表,您执行的命令存储在其中。 完整路径包含在哈希表中。

当您下次执行相同的命令时,bash 不会搜索 PATH 变量,而是从哈希表中获取命令并运行它。

下面显示的示例序列对此进行了演示。 不带任何参数的hash命令显示哈希表的内容。 在此示例中,它是空的,因为我们刚刚开始会话。

$ hashgit 
hash: hash table empty

执行命令,例如 ls

$ ls

现在hash命令将显示包含两个字段的哈希表:

  1. 命令的总命中次数
  2. 命令本身带有完整路径。

以下输出显示/bin/ls到目前为止已被执行 1 次,并且它是现在哈希表中唯一的命令。 下次执行ls命令时,bash 将不会搜索 PATH 变量,它只会从哈希表中获取命令的完整路径并执行它。

$ hash
hits    command
   1    /bin/ls

执行其他命令,例如cat

$ cat /etc/passwd

再次查看哈希表。 现在,您将看到两个条目。

$ hash
hits    command
   1    /bin/cat
   1    /bin/ls

再次执行ls命令几次。

$ ls
$ ls -l

再次查看哈希表。 您仍然会看到两个条目,但ls命令命中计数器将显示 3,因为到目前为止我们在此会话中执行了 3 次 ls

$ hash
hits    command
   1    /bin/cat
   3    /bin/ls

您还可以将命令添加到哈希表而不执行它。 下面将把 tar 命令添加到哈希表中。

$ hash tar

由于 tar 命令被添加到哈希表中而不执行它,因此 tar 命令的命中将为 0,如下所示。

$ hash
hits    command
   1    /bin/cat
   0    /bin/tar
   3    /bin/ls