Shell数组元添加和删除前后缀

添加前后缀

在Linux中使用bash正则表达式来为数组元添加前缀和后缀是一个标准的做法,这在脚本编写中是一个很方便的操作。例如:

bash正则表达式添加前后缀
1
2
3
ARRAY=( one two three )
echo ${ARRAY[@]/#/prefix_}
echo ${ARRAY[@]/%/_suffix}

除了正则表达式外,还有一种漂亮的解决方案:

数组加入前后缀
1
2
3
4
$ ARRAY=(A B C)
$ mapfile -t -d $'\0' EXPANDED < <(printf "prefix_%s_postfix\0" "${ARRAY[@]}")
$ echo "${EXPANDED[@]}"
prefix_A_postfix prefix_B_postfix prefix_C_postfix

mapfile将行读入数组的元素。使用-d $'\0',它将读取以null分隔的字符串,并且-t将从结果中省略分隔符。参见help mapfile

删除前后缀

删除后缀

bash正则表达式删除后缀
1
2
3
4
5
ARRAY=( one.git two.git three.git four.me )
echo ${ARRAY[@]%.git}
> one two three four.me
echo ${ARRAY[@]%.*}
> one two three four

删除前缀

bash正则表达式删除前缀
1
2
3
4
5
ARRAY=( pre.one pre.two pre.three me.four )
echo ${ARRAY[@]#pre.}
> one two three me.four
echo ${ARRAY[@]#*.}
> one two three four

注意:在删除前后缀中,使用的*是正则表达式,表示任意个字符,若要删除指定字符,应当输入具体的字符。