Unix 是否有一种标准方法可以在变量为空时有条件地添加到ENV变量`

Unix 是否有一种标准方法可以在变量为空时有条件地添加到ENV变量`,unix,shell,environment-variables,portability,Unix,Shell,Environment Variables,Portability,我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到LD_LIBRARY_路径。我知道我可以先测试它是否为空,然后直接设置它并附加它 下面的代码似乎不起作用,即使它包含我在case语句中测试的字符串,它也会一直追加到变量 mysetup.sh export AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0 if [ "$LD_LIBRARY_PATH" == "" ]; then echo empty setting exp

我正在创建一个脚本来配置和启动软件。我当前的应用程序需要附加到LD_LIBRARY_路径。我知道我可以先测试它是否为空,然后直接设置它并附加它

下面的代码似乎不起作用,即使它包含我在case语句中测试的字符串,它也会一直追加到变量

mysetup.sh

export AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0
if [ "$LD_LIBRARY_PATH" == "" ]; then
   echo empty setting
   export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib
else
   case $LD_LIB_PATH in
   *$AXIS2C_HOME/lib* )
       echo already there skipping;;
   * )
       echo has entries but appending
       export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib:${LD_LIBRARY_PATH};;
   esac
fi
echo AXIS2C_HOME=${AXIS2C_HOME}
echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
运行示例

ojblass@helium:~/Source/axis2c-src-1.6.0$ pwd /home/ojblass/Source/axis2c-src-1.6.0 ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh empty setting AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0 LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib ojblass@helium:~/Source/axis2c-src-1.6.0$ . ./mysetup.sh has entries but appending AXIS2C_HOME=/home/ojblass/Source/axis2c-src-1.6.0 LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib:/home/ojblass/Source/axis2c-src-1.6.0/lib ojblass@helium:~/Source/axis2c-src-1.6.0$pwd /home/ojblass/Source/axis2c-src-1.6.0 ojblass@helium:~/Source/axis2c-src-1.6.0$/mysetup.sh 空设置 AXIS2C_HOME=/HOME/ojblass/Source/AXIS2C-src-1.6.0 LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib ojblass@helium:~/Source/axis2c-src-1.6.0$/mysetup.sh 有条目但没有附加 AXIS2C_HOME=/HOME/ojblass/Source/AXIS2C-src-1.6.0 LD_LIBRARY_PATH=/home/ojblass/Source/axis2c-src-1.6.0/lib:/home/ojblass/Source/axis2c-src-1.6.0/lib
正如您所注意到的,LD_LIBRARY_路径不断添加到。另外,我有点害怕特定于shell,并且不像我希望的那样便于携带。任何建议都将不胜感激。

如果上面的代码被复制并粘贴,那么答案就无关紧要了

拼写一致 (出现
LD_LIB_PATH
可能不是您想要的。)

当使用以下工具进行测试时:

sh -x mysetup.sh
(. ./mysetup.sh; sh -x mysetup.sh)
(unset LD_LIBRARY_PATH; sh -x mysetup.sh)
我看到第一个命令添加了
$AXIS2C_HOME/lib
,第二个命令序列没有添加两次,第三个命令序列只是设置了它


另一种机制是使用中记录的脚本,如
clnpath
,或其中的一个其他答案。基本上,他们分析一个类似路径的变量,并确保它不包含重复项。

DOH!在HP、AIX、NCR和Linux上工作一天是痛苦的。谢谢你,乔纳森!