다른 사람들이 언급했듯이 해시는 Bash가 유지하는 연관 배열 (키-> 값)이므로 명령이 실행될 때 Bash는이 해시를 먼저 검색하여 디스크의 명령 위치가 이미 발견 $PATH
되어 저장되어 있는지 확인합니다. 더 빠른 검색을 위해.
Bash가 호출 될 때 찾을 명령 목록을 제공하여 해시를 미리로드 할 수 있습니다. 이 변수를라고 BASH_CMDS
합니다.
매뉴얼 페이지에서 발췌
BASH_CMDS
An associative array variable whose members correspond to the
internal hash table of commands as maintained by the hash builtin.
Elements added to this array appear in the hash table; unsetting
array elements cause commands to be removed from the hash table.
또한 Bash 매뉴얼 페이지를 보면 COMMAND EXECUTION 섹션 에 프롬프트가 표시 될 때 Bash가 사용하는 상태 시스템이 자세히 설명되어 있습니다.
발췌
If the name is neither a shell function nor a builtin, and contains no
slashes, bash searches each element of the PATH for a directory con‐
taining an executable file by that name. Bash uses a hash table to
remember the full pathnames of executable files (see hash under SHELL
BUILTIN COMMANDS below). A full search of the directories in PATH is
performed only if the command is not found in the hash table. If the
search is unsuccessful, the shell searches for a defined shell function
named command_not_found_handle. If that function exists, it is
invoked with the original command and the original command's arguments
as its arguments, and the function's exit status becomes the exit
status of the shell. If that function is not defined, the shell prints
an error message and returns an exit status of 127.
-l
스위치를 사용하여 현재 해시에있는 것을 찾을 수 있습니다 .
예
$ hash -l
builtin hash -p /usr/bin/rm rm
builtin hash -p /usr/bin/sudo sudo
builtin hash -p /usr/bin/man man
builtin hash -p /usr/bin/ls ls