シェルスクリプトがif文から変数を取得できない

シェルスクリプトが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

なぜ2部にはなく、3部には設定されているのか理解できません。

何らかの理由でパート2では、長さを決定する変数を選択することはできません。

私が逃したものはありますか?

(私はシェルスクリプトの経験がありません。本を読んでいますが、最初の章を終えました。)

ベストアンサー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では、テストと変数の割り当てが省略されていることがわかりました__STUFF_JAVA意図的なことでしょうか?

最後に、比較は変数が空でないことを確認します(より正確には長さがゼロ以外の文字列である-nかどうか)。-n

これは-z(テスト~のためero-z長文字列)。

したがって、[ -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(注:コードの最初の2つの部分を実行する前に、私のJAVA_HOMEを手動で設定しました。)

おすすめ記事