在bash shell中键入命令时,shell将在$ PATH变量中寻找这些命令。哈希只是您键入的命令以及在哪里找到它们的索引,以帮助下次加快查找速度。
注意: @Anthon的答案很好地定义了什么是哈希!
例如,如果您只运行hash
不带参数的命令,则将获得以前找到的命令以及已使用了多少次(即命中)的列表:
% hash
hits command
2 /usr/bin/host
1 /bin/more
1 /home/saml/bin/autossh_mail.sh
3 /usr/bin/zip
2 /bin/rm
2 /bin/date
2 /usr/bin/vim
1 /usr/bin/htop
2 /bin/mv
3 /bin/ps
8 /usr/bin/ssh
1 /usr/bin/yum
1 /usr/bin/xfreerdp
1 /bin/cp
2 /bin/mkdir
4 /usr/bin/man
1 /usr/bin/gvim
1 /usr/bin/unzip
1 /usr/bin/w
5 /usr/bin/nslookup
51 /bin/ls
15 /usr/bin/find
该命令hash node
返回状态值(0或1),具体取决于该值是否存在于哈希列表中:
hash node
不在我的清单上
% hash node
bash: hash: node: not found
% echo $?
1
注意:任何先前运行的命令的状态都临时存储在环境变量$?中。。在执行每个命令后,将在此处放置状态(0 =成功,1 =失败)。
构造“ cmd1” || {“ cmd2” ...}是or语句。在这里思考和/或从逻辑出发。因此,这意味着做第一件事,如果失败,则做第二件事,否则不要做第二件事。
一个更详细的示例:
% true && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 1
% false && echo "1st cmd ret. 1" || echo "1st cmd ret. 0"
1st cmd ret. 0
逻辑总是令人困惑(至少对我而言),因为返回1表示命令失败,而返回0表示命令成功运行。