我尝试编写 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”。
我被没有“read -A array”的旧 ksh 卡住了。我用“read -r”和“eval set -A ....”尝试了各种技巧,但无济于事。我不能使用“read nvl1 nvl2 nvl3”在读取中进行转义和拆分,因为我事先不知道每行中有多少个名称-值对。
有人对我有用吗?
PS 我知道我在 Perl、Python 甚至 awk 中都在短时间内完成了这项工作。但是,我必须在 ksh 中执行此操作(...或死去尝试;)