代码之家  ›  专栏  ›  技术社区  ›  Saeko

如何检查环境变量是否已设置,但是否确实存在?

  •  2
  • Saeko  · 技术社区  · 7 年前

    我有一个脚本,它必须检查环境变量文件是否已设置,以及它的路径是否确实存在。这是我目前在google上搜索到的内容:

    if env | grep -q ^FILE=
    then
       echo env variable is already exported
    else
       echo env variable was not exported
       exit 1
    fi
    

    如果变量设置正确,则该操作有效,但如果路径不存在,则会在第一条if语句中出错。我应该如何修改语句以检查它?我的任务是创建脚本中不存在的路径。

    2 回复  |  直到 7 年前
        1
  •  2
  •   sneep    7 年前

    因为我们正在编写shell代码,所以环境变量只是普通变量。

    if [ -f "$FILE" ]; then
        echo env variable is already exported
    else
        echo env variable was not exported
    fi
    

    我不明白你为什么会在 FILE 没有使用上述代码导出,但如果要进行如下测试: if [ -f $FILE ] (即不带引号)在以下情况下,您会遇到错误: 文件 未设置。

        2
  •  2
  •   cdarke    7 年前

    环境变量的不同之处在于它们位于环境块中,但除此之外,您可以将它们与中的任何其他变量一样使用 bash 。并非所有贝壳都是这样, csh / tcsh (C-shell)对待他们的方式确实不同。

    有一些测试可以检查变量的存在性(如果使用 [[ ):

    [[ -z $FILE ]] && echo '$FILE empty'
    [[ -n $FILE ]] || echo '$FILE empty'
    

    来自bash 4:

    [[ -v $FILE ]] || echo '$FILE not set'
    

    顺便说一下,小心使用大写变量名,它们可能会与shell使用的变量名发生冲突。