检查环境变量或其包含的路径是否不存在

时间:2014-05-14 15:45:49

标签: bash shell

我想检查环境变量MY_DIR或其包含的路径是否不存在。

有人能看出我做错了吗?

#!/bin/bash

# If $MY_DIR or its containing path doesn't exist
if [ ! $(env | grep -q ^MY_DIR=) ] || [ ! -d "$MY_DIR" ]; then
  echo "not existing"
  # set it
  export MY_DIR="$PWD"
fi

2 个答案:

答案 0 :(得分:1)

由于空字符串无法命名现有目录,因此如果设置了MY_DIR,则无需担心;只检查它的(可能不存在)值是否命名目录。

if [[ ! -d $MY_DIR ]]; then
    export MY_DIR=$PWD
fi

如果MY_DIR在环境中,也没有必要具体检查。虽然可能有一个不是环境变量的shell变量,但可能有一个不是shell变量[0]的环境变量,也不可能有一个shell变量与环境变量同名但具有不同的值(环境变量只是一个设置了export属性的shell变量。)

[0]好的,从技术上讲,您可以继承一个名称不是有效shell标识符的环境变量。让我们忽略那些,不是吗? :)

答案 1 :(得分:0)

我认为可以使用此代码制作:

if [[ ! -d "$MY_DIR" ]]; then
    export MY_DIR="$PWD"
fi

或使用单行:

[[ ! -d "$MY_DIR" ]] && export MY_DIR="$PWD" || echo "MY_DIR already set"

上面的代码回应了一条消息,说明什么时候已经设置,如果不需要,你可以试试这个:

[[ ! -d "$MY_DIR" ]] && export MY_DIR="$PWD"