如何在Bash中的分隔符上拆分字符串?我将这个字符串存储在一个变量中:IN="bla@some.com;john@home.com"现在我想用;划界者使我有:ADDR1="bla@some.com"ADDR2="john@home.com"我不一定需要ADDR1和ADDR2变量。如果它们是数组的元素,那就更好了。在以下答案提出建议后,我得出以下结论:#!/usr/bin/env bashIN="bla@some.com;john@home.com"mails=$(echo $IN | tr ";" "\n")for addr in $mailsdo
echo "> [$addr]"done产出:> [bla@some.com]> [john@home.com]有一个解决方案涉及到内场分离器(IFS)至;。我不知道这个答案是怎么回事,你怎么重置?IFS回到默认状态?关于:IFS解决办法,我试过了,它成功了,我保留了旧的IFS然后恢复:IN="bla@some.com;john@home.com"OIFS=$IFS
IFS=';'mails2=$INfor x in $mails2do
echo "> [$x]"doneIFS=$OIFS顺便说一句,当我试着mails2=($IN)只有在循环打印第一个字符串时,才得到第一个字符串,不带括号。$IN它起作用了。
3 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
IFS
read
IFS
IFS=';' read -ra ADDR <<< "$IN"for i in "${ADDR[@]}"; do # process "$i"done
;
$IN
;
:
while IFS=';' read -ra ADDR; do for i in "${ADDR[@]}"; do # process "$i" done done <<< "$IN"
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
交互式爱情
TA贡献1712条经验 获得超3个赞
for i in $(echo $IN | tr ";" "\n")do # processdone
添加回答
举报
0/150
提交
取消