将 IFS 设置为在读取此处字符串时忽略空格

Setting IFS to ignore whitespaces while reading from a here-string

我在使用 IFS 区分包和发行版时遇到了一点问题。 现在想加上CentOS的版本号,但是问题是CentOS和数字6是用IFS隔开的。 我的问题是,如何让 IFS 忽略空格并将它们视为单个值? 提前致谢:)

...

PACKET_MANAGERS=(
    "Debian|package:package:package|apt:dpkg-query|"
    "CentOS 6|package:package:package|yum:rpm|${CentOS_6_REPO}"
    ...
)
...
   for system in ${PACKET_MANAGERS[@]}
do
    IFS='|' read -r -a data <<< $system
    debug "Testing ${system} => ${data[0]}"

    if echo "${SYSTEM_NAME}" | grep "${data[0]}" &>/dev/null; then
        SYSTEM_NAME_DETECTED="${data[0]}"
    else
        continue
    fi

...

done

你需要引用${PACKET_MANAGERS[@]}:

for system in "${PACKET_MANAGERS[@]}"

否则,将对扩展数组表达式的结果进行分词,因此数组的每个元素中的每个词都将是 for 循环的单独迭代。使用 [@] 将使每个数组元素在结果中成为一个单独的词。