19

我正在使用 bash。

如果已经设置了一个环境变量,我想附加它:

PATH=$PATH":/path/to/bin"

或者,如果它不存在,我想简单地设置它:

PATH="/path/to/bin"

是否有一行语句可以做到这一点?

显然,PATH环境变量几乎总是被设置,但用它来写这个问题是最容易的。

4

3 回答 3

22

迈克尔伯尔的回答略有改进。这也适用于set -u( set -o nounset) :

PATH=${PATH:+$PATH:}/path/to/bin
于 2013-04-30T09:31:55.380 回答
21
PATH=${PATH}${PATH:+:}/path/to/bin
  • ${PATH}如果PATH未设置/为空,则评估为空,否则评估为当前路径
  • ${PATH:+:}如果 PATH 未设置,则计算结果为空,否则计算结果为“:”
于 2013-04-30T09:25:36.880 回答
0

Michael Burr 和用户 spbnick 的回答已经非常出色并说明了原理。我只想添加两个细节:

在他们的版本中,新路径添加到PATH. 这是OP所要求的,但这是一种不太常见的做法。添加到末尾意味着只有在没有其他命令与早期路径匹配时才会选择这些命令。更常见的是,用户将添加到路径的前面。这不是 OP 所要求的,但对于来到这里的其他用户来说,它可能更接近他们的期望。由于语法不同,我在这里突出显示。

此外,在以前的版本中,PATH没有引用 。虽然在大多数类似 Un*x 的操作系统上不太可能在 中包含空格PATH,但始终引用仍然是更好的做法。

对于大多数典型用例,我稍微改进的版本是

PATH="/path/to/bin${PATH:+:$PATH}"
于 2020-11-18T09:12:47.837 回答