我遇到了一个脚本,其中包含以下行:
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_version
不为空。为了进一步验证,我echo
会在测试之前将 的值java_version
写入某个外部文件并在那里找到该值。 - 我将双括号更改为单数,并且测试成功地从命令行和 Java 应用程序调用了脚本。
- 我正在运行 GNU/Linux Ubuntu 18.04、bash 版本 4.4.20、Java 8 (Oracle JDK)。
关于什么可能导致这种行为改变有什么想法吗?
答案1
我将以下行添加到脚本中以查找正在运行的 shell:
ps -p $$ > /path/to/some_file
发现运行的shell是/bin/sh
不支持双括号语法。双括号仅在少数 shell 中受支持(来源)。
所有的功劳都归功于那些在我的帖子下发表评论的人。