有人能解释一下这个命令的意思吗?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
答案1
${GZIP_BINDIR-'/bin'}
是一个bash
参数扩展模式。来自man bash
:
${parameter:-word}
Use Default Values. If parameter is unset or null,
the expansion of word is substituted. Otherwise, the value of parameter
is substituted.
在此部分之前,手册页有(感谢@jwodder 通知):
Omitting the colon results in a test only for a parameter that is unset.
正如手册页所述,它将设置变量的默认值GZIP_BINDIR
。如果GZIP_BINDIR
先前设置了值(除了您未使用的 null 之外:
),则将使用该值,否则/bin
将用作变量的值GZIP_BINDIR
。
另一方面,如果您也想测试空值,请使用此模式(包括:
):
${GZIP_BINDIR:-'/bin'}
之后,$PATH
将扩展为之前保存的值。因此,如果PATH
之前有:
/usr/sbin:/usr/bin
现在你的PATH
意愿是(考虑到GZIP_BINDIR
尚未设定):
/bin:/usr/sbin:/usr/bin
export PATH
将使PATH
所有子进程都可以使用它。
答案2
参数扩展中的连字符前真的没有冒号吗${GZIP_BINDIR-'/bin'}
?
这种结构几乎总是用冒号表示,例如${GZIP_BINDIR:-'/bin'}
,“如果 $GZIP_BINDIR 为 NULL 或未设置,则将其设置为 '/bin'”
但是,您提供的语法是有效,但很少见。${GZIP_BINDIR-'/bin'}
(无冒号)表示“如果 $GZIP_BINDIR 未设置,则将其设置为 '/bin'”。如果已设置(已声明)但未为其分配任何内容(例如,它为 NULL),则不会插入任何内容。
这里可能有一个错误,因为冒号下列的变量构造 (...} :
$PATH...)将要如果 $GZIP_BINDIR 已设置但为 NULL,则仍会插入。由于这会在 $PATH 开头添加冒号,因此会导致首先搜索当前目录。
大多数人认为这是一个安全问题,因为只需将与标准命令同名的恶意程序放在当前目录中,就可以更轻松地运行它。
如果 $GZIP_BINDIR 已设置但为 NULL(空),则要保持 $PATH 不变,正确的语法是${GZIP_BINDIR-'/bin:'}$PATH; export PATH
如果 $GZIP_BINDIR 未设置或设置为 NULL,则要保持 $PATH 不变,正确的语法是${GZIP_BINDIR:-'/bin:'}$PATH; export PATH
答案3
此命令更新 PATH 变量。
是PATH
一个环境变量,指定一组可执行程序所在的目录。
PATH="${GZIP_BINDIR-'/bin'}:$PATH";
如果退出到先前的 PATH,则添加另一个变量的值,GZIP_BINDIR
否则使用 /bin 并将其添加到 PATH
export PATH
export 用于设置所有子进程和子 shell 可用的 PATH 读取这更多信息
您必须注意,这不是静态的,一旦退出 shell,您就会丢失它。
为了使此 PATH 编辑永久生效,您必须将这些行附加到您的.bashrc
gedit .bashrc
并添加行
export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
然后运行命令
source .bashrc