首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将逗号分隔成多个单词,这样我就可以循环遍历每个单词。

问将逗号分隔成多个单词,这样我就可以循环遍历每个单词。
EN

Stack Overflow用户
提问于 2013-06-22 10:24:28
回答 4查看 4.5K关注 0票数 1

我想拆分一个字符串,以便在Bash中使用for -循环。例如,我有一个字符串

代码语言:javascript
复制
hello,my,name,is,mindia

我想把它分割成单独的单词,这样我就可以循环遍历每个单词。有人能帮我吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-22 10:36:29

非常简单的方法是使用分词来排列:

代码语言:javascript
复制
s="hello,my,name,is,mindia"

将输入字段分隔符设置为:

代码语言:javascript
复制
IFS=,

然后将字符串拆分为数组:

代码语言:javascript
复制
a=( $s )

结果:

代码语言:javascript
复制
for word in "${a[@]}"; do echo "- [$word]"; done
票数 3
EN

Stack Overflow用户

发布于 2013-06-22 10:34:44

使用纯bash而不使用split (或者您的意思是cut):

代码语言:javascript
复制
string="hello,my,name,is,mindia"
IFS=, read -r -a array <<< "$string"
# at this point your fields are in the array array
# you can loop through the fields like so:
for field in "${array[@]}"; do
    # do stuff with field field
done
# you can print the fields one per line like so
printf "%s\n" "${array[@]}"

警告。如果您试图解析一个csv文件,它迟早会中断,例如,如果您有一个类似于

代码语言:javascript
复制
field 1,"field 2 is a string, with a coma in it",field 3

说得好。不过,与其他答案相比,有一点是好的:如果您的字段有空格,则此方法仍然有效:

代码语言:javascript
复制
$ string="hello,this field has spaces in it,cool,it,works"
$ IFS=, read -r -a array <<< "$string"
$ printf "%s\n" "${array[@]}"
hello
this field has spaces in it
cool
it
works

另一个优点是,IFS不是全局设置的;它只是为read命令设置的:当您忘记全局设置了IFS时,没有什么不好的惊喜!

票数 3
EN

Stack Overflow用户

发布于 2013-06-22 10:30:34

您可以使用模式替换:

代码语言:javascript
复制
s="hello,my,name,is,mindia"
for i in ${s//,/ }
do
    echo $i
done

下面是一个可以处理空白的版本:

代码语言:javascript
复制
while IFS= read -r -d ',' i; do
    printf "%s\n" "$i"
done <<<"${s:+$s,}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17249665

复制
相关文章

相似问题

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