pattern="::a::b::"
oldIFS=$IFS
IFS="::"
read -r -a extractees <<< $pattern
IFS=$oldIFS
这导致
{"a","b"}
但是,我需要维护索引,所以我想要
{"","a","b",""}
(相比之下,如果我想要{"a","b"}
,我会写"a::b"
。
为什么呢?因为这些元素后来再次拆分(在不同的分隔符上),空的""
值应该产生一个空列表然后。
我如何实现这一目标?
答案 0 :(得分:1)
不幸的是,没有字段分隔符可能超过1个字符,因此'::' → ':'
。
除此之外,应明确禁用globbing以防止在未加引号的变量中潜在的文件名扩展。
set -f # disable globbing
pattern=":a:b c:"
oldIFS=$IFS
IFS=":"
extractees=($pattern)
IFS=$oldIFS
echo "'${extractees[0]}'"
echo "'${extractees[1]}'"
echo "'${extractees[2]}'"
echo "'${extractees[3]}'"