【问题标题】:Creating an array from substrings in Bash not working [duplicate]从 Bash 中的子字符串创建数组不起作用 [重复]
【发布时间】:2021-02-11 08:04:55
【问题描述】:

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

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

下面的脚本文件

输入字符串:abcd\nefgh\nijkl\nmnop

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

这是输出

original string: abcd\nefgh\nijkl\nmnop
   dcba
   hgfe
   lkji
   m
   po

【问题讨论】:

标签: arrays string bash split truncate


【解决方案1】:

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

因为IFS 中的 any 字符会导致拆分为单词,而不是同时拆分。看到IFS='\n' 会在\ n 上拆分输入字符串。因为mnop里面有一个n,所以被拆分成mop

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2018-07-19
    • 2020-05-29
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多