我有一个命令,其输出为:
"-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
的帮助下),则可以毫无问题地分配数组。这是什么原因?是否有任何方法可以保留经过网格化的数据并将它们分配到数组中?
答案 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
是一种删除引号的可怕方法。