从Bash中的子字符串创建数组无效



为什么最后两个数组元素被截断?

我正在尝试从bash中的字符串生成一个数组,使用一个\n作为分层字符。使用命令替换和tr,我已经接近了我想要的,现在我得到了奇怪的输出。

下方的脚本文件

输入字符串:abcdnefghnijklnmnop

#!/bin/bash
oper () {
local fct=$1
local s=$2
IFS='n' read -ra sArr <<< "$s"
for item in ${sArr[@]}
do
printf "   %sn" $(echo $item | rev)
done
}
echo "original string: $2"
oper $1 $2
printf "mirror string: "
exit 0

这是的输出

original string: abcdnefghnijklnmnop
dcba
hgfe
lkji
m
po

为什么最后两个数组元素被截断?

因为IFS中的任何字符都会导致拆分为单词,而不是同时拆分为单词。查看IFS='n'会在n上拆分输入字符串。因为mnop中有一个n,所以它被拆分为mop

首先将n字符的序列更改为单个字符和uniq,然后可以使用IFS=.. read。例如:

IFS='!' read -r -a sarr < <(sed 's/\n/!/g' <<<"$s")

记得用检查您的脚本http://shellcheck.net以纠正引用问题。

最新更新