bash - 将字符串拆分为具有空值的数组

时间:2016-10-31 17:41:08

标签: bash text split pattern-matching

pattern="::a::b::"
oldIFS=$IFS
IFS="::"
read -r -a extractees <<< $pattern
IFS=$oldIFS

这导致

{"a","b"}

但是,我需要维护索引,所以我想要

{"","a","b",""}

(相比之下,如果我想要{"a","b"},我会写"a::b"

为什么呢?因为这些元素后来再次拆分(在不同的分隔符上),空的""值应该产生一个空列表然后

我如何实现这一目标?

1 个答案:

答案 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]}'"