0

我有一个命令,其输出是:

"-1/2"
"-B"
"A"
"C"

但是,当我想将命令的输出分配给数组时,例如:

temp=`command`
eval set -A array $temp

它告诉我:

./test.ksh[6]: -1/2: 0403-010 A specified flag is not valid for this command.

但是,如果我删除前两行输入中的连字符(在 的帮助下sed),则可以毫无问题地分配数组。这是什么原因?有什么方法可以保留连字符数据并将它们也分配到数组中?

4

1 回答 1

2

当我在 ksh93 中尝试这个时,我看到了

$ out='"-1/2"
"-B"
"A"
"C"'
$ echo "$out"
"-1/2"
"-B"
"A"
"C"
$ set -A ary $out 
$ echo "${ary[@]}"
"-1/2" "-B" "A" "C"
$ set -o vi
$ unset ary
$ eval set -A ary $out
ksh: eval[1]: set: -1: unknown option
ksh: eval[1]: set: -/: unknown option
ksh: eval[1]: set: -2: unknown option
Usage: set [-sabefhkmnprtuvxBCGH] [-A name] [-o[option]] [arg ...]
$ eval set -A ary -- $out
$ echo "${ary[@]}"       
-1/2 -B A C

错误信息表明在 之后放置更多选项是有效的-A name,因此您必须使用--标记选项的结尾。

我仍然认为 usingeval是一种删除引号的可怕方法。

于 2013-04-24T01:20:56.060 回答