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


Answers:


19

${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提供给所有子进程。


我想你已经错过了:${GZIP_BINDIR-'/bin'} ”不一定。${parameter-word}也有效,尽管手册页中似乎没有。
nyuszika7h 2015年

@ nyuszika7h是的..我以前不知道..奇怪为什么不将其包含在手册中..
heemayl 2015年

在我计算机上的bash联机帮助页中,该部分上方的段落:-说:“当不执行子字符串扩展时,使用下面记录的格式(例如:-),bash将测试未设置或为null的参数。 省略冒号仅针对未设置的参数进行测试。
jwodder 2015年

作为一个侧面说明,你可以结合的设置PATHexport成一个单一的命令如下:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
水稻朗

8

参数扩展内的连字符前真的没有冒号${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


2

此命令更新PATH变量。

PATH是一个环境变量指定一组,其中的可执行程序位于目录。

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

GZIP_BINDIR如果退出到先前的PATH,这将添加另一个变量的值,否则使用/ bin并将其添加到PATH

export PATH

export用于设置所有子进程和子shell可用的PATH。有关详细信息,请阅读内容。

您必须注意,这不是静态的,退出外壳程序后将其释放。

为了使此PATH编辑成为永久性文件,您必须将这些行附加到 .bashrc

gedit .bashrc

并添加线

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

然后运行命令

source .bashrc

GZIP_BINDIR是变量
Maythux,2015年

什么不对?不,我没有吗?该矿还downvoted
Maythux

为什么要投票?!
Maythux 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.