本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Split string based on delimiter in Bash?

在bash脚本中,如何使用像;这样的分隔符拆分字符串并循环遍历生成的数组?

以什么方式拆分字符串?

这听起来像是家庭作业。不管怎样,到目前为止你都试过什么?张贴一些你正在尝试的东西。

不是家庭作业问题。只是不熟悉shell脚本。我一直在谷歌搜索,但没有找到我想要的东西。

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

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

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

export IFS=";"

sentence="one;two;three"

for word in $sentence; do

echo"$word"

done

注意:在常规BourneShell脚本设置和导出中,IFS将出现在两个单独的行上(ifs='x';export ifs;)。

我认为您应该在修改它之前将ifs存储在一个temp变量中,并在完成之后将其恢复!!

我建议您要么在子shell中执行此操作(用括号括起来),要么保存和恢复ifs(oldifs="$ifs"…代码…export ifs="$oldifs")-如果设置不正确,可能会发生很多奇怪的事情。

谢谢。我正在使用这个脚本,并根据jefromi保存和恢复ifs。但我得到这个错误导出:=:变量名不正确我做错什么了吗?

不需要出口国际单项体育联合会。只需保存它oldIFS=$IFS,设置它IFS=';',做一些事情,然后恢复它IFS=$oldIFS。

你救了我,谢谢

我将使用exprt ifs=",",因为如果输入是从参数馈送的,那么包含;的参数的含义可能与分隔符的含义不同。

如果您不想处理ifs(可能是循环中的代码),这可能会有所帮助。

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

#local str

for str in ${STR//;/ } ; do

echo"+ "$str""

done

但是,如果您可能有空白,那么对于这种方法,您需要使用一个临时变量来保存"rest",如下所示:

#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

为什么投反对票却没有评论?你应该证明…

我使用第一种方法使用${STR//;/ }语法。但是我现在有一个问题,如果我传递一个没有分隔符的字符串,它会给出一个错误:"替换错误"。我想把这样的字符串当作一个带有一个元素的数组。你有什么解决这个问题的建议吗?

这里是对阿什拉齐答案的一个变化,它不依赖于$IFS。它确实有自己的问题,我将在下面讨论。

sentence="one;two;three"

sentence=${sentence//;/$'

'}  # change the semicolons to white space

for word in $sentence

do

echo"$word"

done

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

你只需做一个for word in ${sentence//;/$'

'}(省略第二个任务)。要只在换行符上循环,可以执行类似于echo ${sentence//;/$'

'} | while read elem; do echo"$elem"; done的操作。

sentence="one;two;three"

a="${sentence};"

while [ -n"${a}" ]

do

echo ${a%%;*}

a=${a#*;}

done

下面是您可以使用的示例代码:

$ STR="String;1;2;3"

$ for EACH in `echo"$STR" | grep -o -e"[^;]*"`; do

echo"Found: "$EACH"";

done

grep-o-e"[^;]*"将选择任何不是";"的内容,因此将字符串拆分为";"。

希望有所帮助。

谢谢,但由于某种原因,它不会循环。它只输出

找到:"字符串"一次

@时髦的家伙:它是为我循环。

str前面的"$"和for表示shell提示,您省略了它。我非常肯定它能像我现在使用它一样工作。D

我把它拿出来放进了一个shell脚本

嗯。这很奇怪。我真的不知道为什么。不过,为了以防万一,看看我在这里做了什么:dl.getdropbox.com/u/1961549/images/it_works.jpg。

这只在字符串不包含空格时有效

linux中如何分割字符串数组中,关于bash:linux shell脚本:拆分字符串,将它们放入一个数组中,然后循环遍历它们...相关推荐

  1. 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表

    import java.util.ArrayList;/*** @author silence* 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表*/ public ...

  2. 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。

    集合练习.学生信息包括学号.姓名.出生日期.性别.把N个学生的信息放入一个集合中.可以根据学号,对学生信息进行检索.并可以根据生日进行排序输出. Student.java package Collec ...

  3. 设一个学生的信息包括学号、姓名、出生日期和性别等。把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出。

    设一个学生的信息包括学号.姓名.出生日期和性别等.把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出. 要求 对于每个学生的个人信息,可以定义一个类 ...

  4. Android:如何将Enum放入捆绑包中?

    本文翻译自:Android: How to put an Enum in a Bundle? 如何将Enum对象添加到Android Bundle? #1楼 参考:https://stackoom.c ...

  5. char N2Char(int n)函数:将一个整数转换为字符串,并放入一个字符串中

    //将一个整数转换为字符串,并放入一个字符串中 char N2Char(int n)//一次只能转换一个数 {int i;char c;if ((i = n / 10) != 0)N2Char(i); ...

  6. Linux下将数据文件的指定域读取到shell脚本中

    Linux下将数据文件的指定域读取到shell脚本中 这个例子说明了怎样在Linux下shell脚本中从数据文件读取特定的域(field)并进行操作.例如,假设文件employees.txt的格式是{ ...

  7. 将 Bean 放入 Spring 容器中的方式

    文章目录 将 Bean 放入 Spring 容器中的方式 1.@Configuration + @Bean 2.@Componet + @ComponentScan 3.@Import注解导入 3.1 ...

  8. R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中

    R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).如果没有指定行标识符号,则所有的字段都会放入variable变量中 目录

  9. Python产生100个1—100的随机数放入列表Num中,输出列表中的数,然后将它们排序,并输出排序结果。

    import random #内建函数 Num=[] for i in range(101):Num.append(random.randint(1,100)) #append()将参数添加到列表末尾 ...

最新文章

  1. c++.net 托管类封装非托管类
  2. CV之路——opencv基本操作
  3. 【机器学习基础】一文归纳AI数据增强之法
  4. Event/window.Event属性和方法
  5. 浅释一下,为什么要使用接口?
  6. python中strip、startswith、endswith
  7. Springboot Vue Login(从零开始实现Springboot+Vue登录)
  8. python下载网页中的pdf文件_Python读取网页上的pdf文件,输出字符串
  9. call和calling的用法_call的用法及短语例句
  10. Ecipse:calculating requirements and dependencies(长时间阻塞问题)
  11. android5.1不生成odex
  12. js高级学习笔记-14-从函数运行和内存角度理解闭包
  13. 运营商线路细分_国内三大运营商宽带线路及分级介绍
  14. m4s格式转换mp3_音乐怎么转换mp3格式
  15. 第二次作业-语言和文法
  16. 重磅!中国芯片新锐50强榜单发布,上海20家、北京仅4家!(附:详细解读)...
  17. Android App links 链接打开app功能
  18. 【操作系统概念-作业6】CPU Scheduling
  19. WEB、WEB标准、W3C的理解
  20. 中国计算机仿真行业全景调查与投资策略建议报告2022-2028年版

热门文章

  1. beyond compare 4.2.9桌面右键集成的问题修复
  2. webpack打包优化之外部扩展externals的实际应用
  3. Django的路由层
  4. c#目录以及子目录下图片批量缩放,像素不变,图像大小改变
  5. 【转载】shell实例手册
  6. Android 自定义View -- 简约的折线图
  7. uva 1291 - Dance Dance Revolution ( dp )
  8. DevExpress GridControl 导出为Excel
  9. SOA的十大技术理论体系
  10. 对话框响应WM_KEYDOWN消息