Я пытаюсь написать 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
Очевидно, мой код больше не работает, поскольку «чтение» удаляет все цитирование, а второй элемент массива будет просто «NAME2 VALUE2_1».
Я застрял со старым ksh, в котором нет "read -A array". Я пробовал различные уловки с "read -r" и "eval set -A ....", но безрезультатно. Я не могу использовать "read nvl1 nvl2 nvl3" для отмены экранирования и разделения внутри чтения, так как я не знаю заранее, сколько пар имя-значение находится в каждой строке.
У кого-нибудь есть для меня полезный трюк?
PS Я знаю, что мне пришлось сделать это в самый последний момент на Perl, Python, даже на awk. Однако я должен сделать это в ksh (... или умереть, пытаясь;)