Сбой назначения массива с дефисом / тире в данных

У меня есть команда, вывод которой:

"-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 ответ

Решение

Когда я пытаюсь это сделать в 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 это ужасный способ удалить цитаты.

Другие вопросы по тегам