数组赋值失败,数据中带有连字符/破折号

时间:2013-04-23 13:31:24

标签: ksh

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

"-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的帮助下),则可以毫无问题地分配数组。这是什么原因?是否有任何方法可以保留经过网格化的数据并将它们分配到数组中?

1 个答案:

答案 0 :(得分: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之后放置更多选项是有效的,因此您必须使用--标记选项的结尾。

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