Я пытаюсь написать скрипт KSH для обработки файла, состоящего из пар имя-значение, по несколько в каждой строке.
Формат:
NAME1 VALUE1,NAME2 VALUE2,NAME3 VALUE3, etc
Предположим, я пишу:
read l
IFS=","
set -A nvls $l
echo "$nvls[2]"
Это даст мне вторую пару имя-значение, красивую и простую. Теперь предположим, что задача расширена, чтобы значения могли включать запятые. Они должны быть спасены, как это:
NAME1 VALUE1,NAME2 VALUE2_1\,VALUE2_2,NAME3 VALUE3, etc
Очевидно, что мой код больше не работает, так как «read» удаляет все кавычки, а второй элемент массива будет просто «NAME2 VALUE2_1».
Я застрял с более старым ksh, у которого нет "read -A array". Я пробовал разные трюки с «read -r» и «eval set -A ....», но безрезультатно. Я не могу использовать «read nvl1 nvl2 nvl3», чтобы делать эскапирование и разбиение внутри чтения, так как я не знаю заранее, сколько пар имя-значение есть в каждой строке.
У кого-нибудь есть полезная хитрость для меня?
PS
Я знаю, что делаю это в самый раз в Perl, Python, даже в awk. Тем не менее, я должен сделать это в ksh (... или умереть, пытаясь;)