将 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
循环的单独迭代。使用 [@]
将使每个数组元素在结果中成为一个单独的词。
我在使用 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
循环的单独迭代。使用 [@]
将使每个数组元素在结果中成为一个单独的词。