Bash $PATH中的平铺字符(';~';)?(例如:PATH=';~/bin';:/usr/bin:/bin)

Bash $PATH中的平铺字符(';~';)?(例如:PATH=';~/bin';:/usr/bin:/bin),bash,unix,path,posix,Bash,Unix,Path,Posix,根据我的测试,bash对$PATH中的~非常满意,但/usr/bin/中的不满意这方面有什么标准(如POSIX)吗? 例如: [步骤100]#echo$BASH#u版本 4.4.12(1)-发布 [步骤101]#echo$PATH /root/bin:/usr/sbin:/usr/bin:/sbin:/bin [步骤102]#/usr/bin/哪个路径 /root/bin/passh [步骤103]#输入passh passh是/root/bin/passh [步骤104]# [步骤105]#路

根据我的测试,
bash
$PATH
中的
~
非常满意,但
/usr/bin/中的
不满意这方面有什么标准(如POSIX)吗?

例如:

[步骤100]#echo$BASH#u版本
4.4.12(1)-发布
[步骤101]#echo$PATH
/root/bin:/usr/sbin:/usr/bin:/sbin:/bin
[步骤102]#/usr/bin/哪个路径
/root/bin/passh
[步骤103]#输入passh
passh是/root/bin/passh
[步骤104]#
[步骤105]#路径='~/bin':/usr/sbin:/usr/bin:/sbin:/bin
[步骤106]#echo$PATH
~/bin:/usr/sbin:/usr/bin:/sbin:/bin
[步骤107]#/usr/bin/哪个路径
[步骤108]#散列-r
[步骤109]#散列
哈希:哈希表为空
[步骤110]#输入passh
passh是/root/bin/passh
[步骤111]#

正如我们所看到的,在步骤107
中,它再也找不到
passh
,但在步骤110
bash
中,在我清除哈希表(
hash-r
)之后,仍然可以找到
passh

您在
路径
变量:
“~/bin”

这里引用了
~
,没有展开。这可以通过
bash
内置实用程序来处理,比如
type
,但是
是一个外部程序,它不会扩展
~

如果要展开
~
,请将其保留在引号之外,如下所示:

PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
或者使用
$HOME

PATH="$HOME/bin":/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin

此部分位于
路径
变量:
“~/bin”

这里引用了
~
,没有展开。这可以通过
bash
内置实用程序来处理,比如
type
,但是
是一个外部程序,它不会扩展
~

如果要展开
~
,请将其保留在引号之外,如下所示:

PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
或者使用
$HOME

PATH="$HOME/bin":/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin

@whjm
bash
本身可以将
PATH
的值中的文字tilde解释为
$HOME
的快捷方式,但其他程序(如
)将不起作用。很抱歉@whjm删除
哈希
将不起作用。让我来编辑它。不需要一个标准:你没有一个目录的名字,字面上是
~
<代码>路径
对于
bash
不是专用的;任何使用
execlp
execvp
执行新程序的程序都会使用它,因此它不(也不应该)知道特定于shell的快捷方式。@whjm
bash
本身可以将
PATH
的值中的文字tilde解释为
$HOME
的快捷方式,但其他程序除外(如
哪个
)不会。抱歉@whjm删除
散列
无效。让我来编辑它。不需要标准:您没有一个目录,它的名字,字面上是
~
路径
不是
bash
的专用目录;任何使用
execlp
execvp
的程序都可以使用它来执行一个新程序不(也不应该)知道特定于shell的快捷方式。