我继承了一个zsh脚本,它为一些模拟设置了一堆环境变量。它想编辑$ path变量,以便找到一些perl脚本:
typeset -U path
path=( ${SIMENV_BIN} $path )
但是,当我获取脚本(source setup.source
)时,$ path变量保持不变。如果我将这些行复制到命令提示符,他们执行更新$ path。如果我在脚本中添加'echo'并再次获取它,则typeset命令似乎清除了$ path变量。
有人会介意向我解释发生了什么,以及我如何解决这个问题?
答案 0 :(得分:3)
默认情况下,typeset命令使用提供的名称创建一个新变量,该名称是当前函数的本地名称,因此当函数返回时,对该变量的更改将会丢失。添加-g
选项:
typeset -gU path
这将阻止本地化变量。
答案 1 :(得分:2)
我认为您可能需要使用.zshenv,因为它是在shell的所有调用中获取的。