java 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\"");
}
}
# 1 楼答案
因此,我通过在set命令前抛出一个“eval”来实现它。看起来是这样的:
我不确定这到底是为什么起作用,但确实起了作用
# 2 楼答案
这类事情很难做到。这似乎有效:
脚本
./roses
的作用与Java类相同。变量IFS
是字段间分隔符字符串;它被设置为新行(仅限)。set
行创建一个数组colors
。值是您从执行和捕获eval printf '%s\\n' $(./roses)
中获得的值。第二个printf
语句每行打印一个数组元素在Mac OS X 10.8.4上用
ksh
测试在
bash
中的一个等价物是:根据^{} 的版本,可能还有其他方法可以实现
在践踏
$IFS
之前,应该保存并恢复它的值