如何检查是否设置了PATH?如果没有,请从参数中设置它

sta*_*low 1 bash

#!/bin/bash

if[$LD_PATH == ""]
 then
   export LD_PATH=$1
 else
   export LD_PATH=$LD_PATH
fi

#excute the program that needs the path
./someProgThatNeedsThePath
Run Code Online (Sandbox Code Playgroud)

我一直在"无法打开共享对象文件"

Cal*_*leb 8

首先,由于缺少空格,您的bash语法被破坏了.首先,你需要围绕[]闭合的空间.如果使用较新的备用双括号语法,则无需担心引用正在测试的变量.

#!/bin/bash

if [[ $LD_PATH = "" ]]; then
   export LD_PATH="$1"
else
   export LD_PATH="$LD_PATH"
fi
Run Code Online (Sandbox Code Playgroud)

但你真正的问题根本不是那个.由于您的代码在单独的bash shell中运行,因此代码对您在父shell中运行的任何内容都没有影响.为此,您需要构建一个函数:

function add_to_ld_path () {
    if [[ -z $LD_PATH ]]; then
       export LD_PATH="$1"
    fi
}
Run Code Online (Sandbox Code Playgroud)

将该代码添加到.profile,然后add_to_ld_path /my/path在您想要使用它时运行它.请注意,由于您的"else"语句实际上并未执行任何操作,因此我将其删除.我还用自己的内置空字符串测试引号替换了你的测试空白字符串.

接下来是你实际想要完成的事情.如果您想要做的就是将变量设置为空,那么UncleAli的解决方案非常简单.但是做这样的事情可能有用:

function add_to_ld_path () {
    case ":$LD_PATH:" in
      *"$1"*) :;;
      *) LD_PATH=$LD_PATH:$1
    esac
}
Run Code Online (Sandbox Code Playgroud)

如果它不是LD_PATH变量的一部分,这将检查当前路径并添加给定的路径,否则它将不管它.