Shell 脚本未在 if 语句中获取变量

Shell 脚本未在 if 语句中获取变量

我有一些代码看起来像这样:

  ################### - Let's call this section 1
  if [ -n "$STUFF_JAVA" ]; then
    __LAUNCHER="$STUFF_JAVA"
  else
    __LAUNCHER="java"
  fi
  ################### - Let's call this section 2
  if [ -n "$JAVA_HOME" ]; then
    # # echo "DEBUG: Using JAVA_HOME"
   _STUFF_JAVA_HOME="$JAVA_HOME"
   _STUFF_JAVA="$_STUFF_JAVA_HOME"/bin/$__LAUNCHER
  else
     echo "testing"
  fi
  ############## - Let's call this section 3
  _STUFF_JAVA_HOME="$JAVA_HOME"
  _STUFF_JAVA="$_STUFF_JAVA_HOME"/bin/$__LAUNCHER
  ##############

我不明白为什么第 2 部分在设置 _STUFF_JAVA_HOME 变量时出现问题,但第 3 部分却没有?我需要在某处使用大括号或圆括号吗?

我希望我的代码设置以下变量:

_STUFF_JAVA_HOME
_STUFF_JAVA

我不明白为什么它被设置在第 3 部分而不是第 2 部分。

由于某种原因,在第 2 部分中,它无法选取变量来确定长度......

我有什么遗漏的吗?

(我对 shell 脚本缺乏经验。我正在读一本书,并且已经完成了第一章。)

答案1

(base) jj@tb-jj:/$ ################### - Let's call this section 1
  if [ -n "$STUFF_JAVA" ]; then
    __LAUNCHER="$STUFF_JAVA"
  else
    __LAUNCHER="java"
  fi
  ################### - Let's call this section 2
  if [ -n "$JAVA_HOME" ]; then
    # # echo "DEBUG: Using JAVA_HOME"
   _STUFF_JAVA_HOME="$JAVA_HOME"
   _STUFF_JAVA="$_STUFF_JAVA_HOME"/bin/$__LAUNCHER
  else
     echo "testing"
  fi
  
(base) jj@tb-jj:/$ echo "$_STUFF_JAVA"
./Some/Path/bin/java
(base) jj@tb-jj:/$ echo "$_STUFF_JAVA_HOME"
./Some/Path

它似乎工作正常。您能否更具体地说明不良行为到底是什么?另外,你确实有一个JAVA_HOME变量集,是吗?

另外,我发现您在第 1 节测试和变量赋值中省略了_from 。_STUFF_JAVA这是故意的吗?

最后,-n比较是验证变量不为空(或者更准确地说,它是长度不-n为零的字符串)。

这与比较-z(测试为了一个-zero 长度的字符串)。

因此,请注意[ -n "$my_var" ]会产生与 不同的结果[ -n $my_var ]

(base) jj@tb-jj:/$ [ -n "$BOB" ] && echo 1 # I will produce nothing, because you're expanding $BOB inside a blank \
                                           # string, and then testing if a string is null (it's not). 
(base) jj@tb-jj:/$ [ -n $BOB ] && echo 1 # I will return 1, because you're now testing on an undeclared variable.
1

./Some/Path(注意:在执行代码的前两部分之前,我手动设置了自己的 JAVA_HOME )

相关内容