同じテストで[[]]テストが失敗し、[]成功した場合はいつですか?

同じテストで[[]]テストが失敗し、[]成功した場合はいつですか?

次の行を含むスクリプトが見つかりました。

java_version=$($JAVA_HOME/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d '_' -f 1,3)

以下はテストです。

if [[ -n "$java_version" ]]; then
    ...

コマンドラインから呼び出すとテストが成功します。 Javaアプリケーションから呼び出すと失敗します。

いくつかの便利な注意:

  • スクリプトの最初の行はです#!/usr/bin/env bash
  • テストの成功は、コマンドラインから呼び出すときにjava_versionnullではないことを意味します。さらに確認するために、echoテストする前にいくつかの外部ファイルに値を書き、java_versionそこから値を見つけます。
  • 二重括弧を単数に変更し、テストはコマンドラインとJavaアプリケーションでスクリプトを正常に呼び出しました。
  • 私はGNU / Linux Ubuntu 18.04、bashバージョン4.4.20、Java 8(Oracle JDK)を実行しています。

この動作の変化の原因が何であるかについてのアイデアはありますか?

答え1

実行中のシェルを見つけるためにスクリプトに次の行を追加しました。

ps -p $$ > /path/to/some_file

/bin/sh実行中のシェルが二重角かっこ構文をサポートしていないことがわかりました。二重括弧はいくつかのシェル(源泉)。

すべてのクレジットは私の投稿にコメントした人に戻ります。

関連情報