Сбой назначения массива с дефисом / тире в данных
У меня есть команда, вывод которой:
"-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
это ужасный способ удалить цитаты.