使用 JAVA 多行输出作为 shell 脚本中的变量

Posted

技术标签:

【中文标题】使用 JAVA 多行输出作为 shell 脚本中的变量【英文标题】:Use JAVA multi-line outputs as variables within shell script 【发布时间】:2020-08-05 19:13:55 【问题描述】:

我的 JAVA 代码输出如下所示。

    Name="John"
    Age="23"
    Gender="Male"
    Phone="+123 456 789"
    ..
    ..

我想将上面的 java 代码输出用作 shell 脚本中的变量,而无需编写任何中间文件。我正在尝试在 Myscript.sh 中使用以下命令获取变量

JAVA_OUTPUT=`java -cp ojdbc6.jar:. javaClassFile args`
echo $JAVA_OUTPUT

但我无法将 java 输出设置为 shell 脚本中的变量

【问题讨论】:

【参考方案1】:

您可以使用关联数组来存储所有键/值对:

declare -A vars
while IFS='=' read -r key value; do
    vars[$key]=$value;
done < <(java -cp ojdbc6.jar:. javaClassFile args)
echo "$vars[Name] is $vars[Age]"
# Etc.

或者,如果您更改您的 java 程序以在值周围添加引号,并带有空格(如电话号码一),则 source &lt;(java -cp ojdbc6.jar:. javaClassFile args) 之类的内容可能适用于创建多个变量。

【讨论】:

我已经修改了我的 java 代码来为值添加引号,但是 source 命令不适用于声明变量。而while循环在意外标记`附近抛出语法错误 @balachandar 确定您使用的是 bash? 是的。我正在使用 bash 环境 @balachandar source &lt;(your program) 必须在 Bash 中工作——根据 Wikipedia,语法背后的功能至少从 1994 年就已经存在。确保不要在两者之间添加任何额外的空格字符“小于”符号和左括号。

以上是关于使用 JAVA 多行输出作为 shell 脚本中的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何停止多行不应在 Shell 脚本中返回

shell 脚本中的多行 awk 脚本

是否可以在 shell 脚本中的多行命令中包含内联注释? [复制]

使用shell脚本在指定模式后将多行插入文件

shell脚本调JAVA程序,获取JAVA程序返回值并echo输出

如何避免作为 sql 查询输出的一部分返回的字符串值被拆分为 bash/shell 脚本中数组中的不同字段