谁能解释这个命令的含义?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
谁能解释这个命令的含义?
PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
Answers:
${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
提供给所有子进程。
:-
说:“当不执行子字符串扩展时,使用下面记录的格式(例如:-),bash将测试未设置或为null的参数。 省略冒号仅针对未设置的参数进行测试。 ”
PATH
和export
成一个单一的命令如下:export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
参数扩展内的连字符前真的没有冒号${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
此命令更新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-'/bin'}
”不一定。${parameter-word}
也有效,尽管手册页中似乎没有。