zsh config-导出还是不导出?


23

在我设置变量时,我~/.zshrc可以使用export

export PATH=/some/path

或不

PATH=/some/path

这些有何不同?应该使用哪个?


非交互式shell(例如,您编写的shell脚本)也使用的环境变量应放入.zshenv
弗朗西斯科

是否也~/.zshenv由登录外壳提供?应该PATH在那里定义?
jordelver

1
PATH可能是应该在内部定义的变量的最佳示例~/.zshenv,此文件可通过任何 zsh会话获取(除非您使用某些选项将其关闭)。请参阅man zsh以获取有关获取哪些文件以及按什么顺序进行的审查。
弗朗西斯科

好的,谢谢@Francisco我将阅读手册页。
jordelver

Answers:


21

如果希望程序从zsh运行以查看var,请导出它。
对于路径,您可能要导出。
相反的export PATH=/some/path,你可能想export PATH="$PATH:/some/path",除非你打算彻底清除出系统预设的路径。


太好了,谢谢。然后,我现在将导出作为一般规则。
jordelver

21

Demure已经回答了您的特定问题。但是,这是一个zsh问题PATH。因此$PATH,还有另一点:在标准变量旁边,还有$path一个数组。在这里,您会看到区别(是否可以使用冒号...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

两种变体会自动保持同步。那么,使用数组有什么好处?

  • 您可以通过声明后者,typeset -U path以“仅保留每个重复值的第一次出现”(来自man zshbuiltins)。这意味着即使您连续地采购源代码~/.zshrc(因为您更改了源代码或其他内容),也不会一次又一次地使用相同的值来使其混乱,这可以使您的路径保持整洁。
  • 您可以path+=(/new/path)用来将新目录添加到PATH。要删除元素,您必须使用一些技巧,请参阅例如/programming//q/3435355/2037712http://www.zsh.org/mla/users//2005/msg01132.html
  • 您可以通过以下方式轻松遍历PATH中的元素 for i ($path) { print $i # or do something else }

最后,这是我的配置摘录:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

谢谢,这实际上是一个后续问题。我将使用path而不是来管理路径PATH
jordelver

1
很高兴听到我已经担心自己过时的消息。顺便说一句。我忘记的另一个优势:您可以轻松地使用循环元素for i ($path) { print $i # or do something else }
mpy
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.