首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >linux shell脚本:拆分字符串,将它们放入一个数组中,然后遍历它们

linux shell脚本:拆分字符串,将它们放入一个数组中,然后遍历它们
EN

Stack Overflow用户
提问于 2009-09-10 18:36:37
回答 5查看 127.5K关注 0票数 43

可能重复:

Split string based on delimiter in Bash?

在bash脚本中,如何使用;之类的分隔符拆分字符串并遍历结果数组?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-10 19:02:13

您可以跳过显式创建数组的步骤...

我喜欢使用的一个技巧是将字段间分隔符(IFS)设置为定界符。这对于遍历空格或从许多unix命令的stdout中返回分隔结果特别方便。

下面是一个使用分号的示例(正如您在问题中所提到的):

代码语言:javascript
复制
export IFS=";"
sentence="one;two;three"
for word in $sentence; do
  echo "$word"
done

注意:在常规的Bourne-shell脚本设置中,导出IFS将在两个单独的行上进行(IFS='x';导出IFS;)。

票数 77
EN

Stack Overflow用户

发布于 2009-09-10 19:44:53

如果你不想弄乱IFS (也许是为了循环中的代码),这可能会有所帮助。

如果知道字符串中没有空格,可以用空格替换';‘,并使用for/in结构:

代码语言:javascript
复制
#local str
for str in ${STR//;/ } ; do 
   echo "+ \"$str\""
done

但是,如果您可能有空格,那么对于这种方法,您将需要使用temp变量来保存"rest“,如下所示:

代码语言:javascript
复制
#local str rest
rest=$STR
while [ -n "$rest" ] ; do
   str=${rest%%;*}  # Everything up to the first ';'
   # Trim up to the first ';' -- and handle final case, too.
   [ "$rest" = "${rest/;/}" ] && rest= || rest=${rest#*;}
   echo "+ \"$str\""
done
票数 29
EN

Stack Overflow用户

发布于 2009-09-10 19:25:53

这是ashirazi的答案的一个变体,它不依赖于$IFS。它确实有它自己的问题,我在下面列出。

代码语言:javascript
复制
sentence="one;two;three"
sentence=${sentence//;/$'\n'}  # change the semicolons to white space
for word in $sentence
do
    echo "$word"
done

这里我使用了换行符,但您可以使用制表符"\t“或空格。然而,如果这些字符中的任何一个在文本中,它也将在那里被拆分。这就是$IFS的优点-它不仅可以启用分隔符,还可以禁用默认分隔符。只需确保在更改它之前保存它的值--就像其他人建议的那样。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1406966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档