bash 中 ${GZIP_BINDIR-'/bin'} 是什么意思?

bash 中 ${GZIP_BINDIR-'/bin'} 是什么意思?

有人能解释一下这个命令的意思吗?

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

相关内容