java - ksh 命令用引号替换到数组中

标签 java shell scripting ksh

我有一个具有以下输出的 Java 类:

"Roses are red" "Violets are blue" "Daisies are white"

我正在尝试创建一个 KornShell (ksh) 脚本来执行此 Java 类,将结果存储到数组中,然后输出

Roses are red
Violets are blue
Daises are white

这是我第一次尝试该脚本:

1 #!/bin/ksh
2 
3 set -A colors $(java Colors)
4 
5 for i in "${colors[@]}"
6 do
7     echo "$i"
8 done

但是,输出如下所示:

"Roses
are
Red"
"Violets
are
blue"
"Daisies
are
white"

当我抛出时:

echo set -A colors $(java Colors)

进入脚本查看正在调用什么,它返回:

set -A colors "Roses are Red" "Violets are blue" "Daisies are white"

如果我用上面的第 3 行替换确切的输出,我会得到所需的输出:

Roses are red
Violets are blue
Daises are white

为什么命令替换会导致整个事情失败?

下面是 Java 类(如果有帮助的话):

public class Colors {
    public static void main(String[] args) {
        System.out.println("\"Roses are Red\" \"Violets are blue\" \"Daisies are white\"");
    }   
}

最佳答案

所以我最终通过在 set 命令前面添加一个“eval”来使其工作。它看起来像这样:

1 #!/bin/ksh
2 
3 eval set -A colors $(java Colors)
4 
5 for i in "${colors[@]}"
6 do
7     echo "$i"
8 done

我不确定为什么会这样,但它确实有效。

关于java - ksh 命令用引号替换到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577933/

相关文章:

arrays - 如何在 Bash 中将字符串转换为十六进制

windows - 如何用命令行参数字符串替换bat文件中的字符串

java - 明显的类型冲突,但编译

java - 使用可变参数的方法重载

Java日期格式对话 当前时间n日期

linux - 在一个脚本中分组不同的 linux 命令

html - 如何从 BASH 脚本向 .html 动态添加文本?

java - 为什么我无法从查询中获取结果列表?

PHP while 循环加 2

shell - yum update 在脚本中调用时忽略排除