You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

zsh下.sh脚本设置环境变量失效:如何转换适配addvar函数实现正常导出

问题根源

  • 报错addvar:1: bad substitution是因为原脚本用了Bash专属的间接变量引用语法${!1},zsh默认不支持该写法
  • 直接用sh clik_profile.sh/bash clik_profile.sh无效果是因为这两种方式都会启动独立子进程执行脚本,子进程设置的环境变量不会同步到当前的zsh父会话,必须用source命令执行才会在当前会话生效

兼容zsh的修改后脚本内容

把原脚本里的addvar函数替换为兼容写法即可,完整脚本如下:

# this code cannot be run directly
# do 'source /Users/henry/code/plc_3.0/plc-3.01/bin/clik_profile.sh' from your sh shell or put it in your profile

function addvar () {
# 兼容bash和zsh的间接变量取值逻辑
if [ -n "$ZSH_VERSION" ]; then
  local tmp="${(P)1}"
else
  local tmp="${!1}"
fi
tmp="${tmp//:${2}:/:}" ; tmp="${tmp/#${2}:/}" ; tmp="${tmp/%:${2}/}" ;
export $1="${2}:${tmp}" ;
} 

if [ -z "${PATH}" ]; then 
PATH=/Users/henry/code/plc_3.0/plc-3.01/bin
export PATH
else
addvar PATH /Users/henry/code/plc_3.0/plc-3.01/bin
fi
if [ -z "${PYTHONPATH}" ]; then 
PYTHONPATH=/Users/henry/code/plc_3.0/plc-3.01/lib/python/site-packages
export PYTHONPATH
else
addvar PYTHONPATH /Users/henry/code/plc_3.0/plc-3.01/lib/python/site-packages
fi
if [ -z "${DYLD_LIBRARY_PATH}" ]; then 
DYLD_LIBRARY_PATH=/Users/henry/code/plc_3.0/plc-3.01/lib
export DYLD_LIBRARY_PATH
else
addvar DYLD_LIBRARY_PATH /Users/henry/code/plc_3.0/plc-3.01/lib
fi
if [ -z "${DYLD_LIBRARY_PATH}" ]; then 
DYLD_LIBRARY_PATH=/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current
export DYLD_LIBRARY_PATH
else
addvar DYLD_LIBRARY_PATH /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Versions/Current
fi
if [ -z "${DYLD_LIBRARY_PATH}" ]; then 
DYLD_LIBRARY_PATH=/usr/local/Cellar/gcc/11.2.0/lib/gcc/11
export DYLD_LIBRARY_PATH
else
addvar DYLD_LIBRARY_PATH /usr/local/Cellar/gcc/11.2.0/lib/gcc/11
fi
CLIK_PATH=/Users/henry/code/plc_3.0/plc-3.01
export CLIK_PATH

CLIK_DATA=/Users/henry/code/plc_3.0/plc-3.01/share/clik
export CLIK_DATA

CLIK_PLUGIN=rel2015
export CLIK_PLUGIN

生效方式

修改保存脚本后,在zsh中执行以下命令即可立即生效:

source /path/to/your/clik_profile.sh

如果需要每次打开zsh都自动加载,把上面这条命令加到~/.zshrc文件末尾即可。

内容的提问来源于stack exchange,提问作者user1773603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:54:03