为什么最后两个数组元素被截断?
我正在尝试从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
,所以它被拆分为m
和op
。
首先将n
字符的序列更改为单个字符和uniq,然后可以使用IFS=.. read
。例如:
IFS='!' read -r -a sarr < <(sed 's/\n/!/g' <<<"$s")
记得用检查您的脚本http://shellcheck.net以纠正引用问题。