我有一个具有以下输出的 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/