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.

しかし、( の助けを借りて) 入力の最初の 2 行のハイフンを削除すると、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ため、 を使用--してオプションの終わりをマークする必要があります。

eval引用符を削除するのは恐ろしい方法だと今でも思います。

于 2013-04-24T01:20:56.060 に答える