次のコードがあります。
################### - 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を手動で設定しました。)