linux中如何分割字符串数组中,关于bash:linux shell脚本:拆分字符串,将它们放入一个数组中,然后循环遍历它们...
本问题已经有最佳答案,请猛点这里访问。
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-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表
import java.util.ArrayList;/*** @author silence* 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表*/ public ...
- 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。
集合练习.学生信息包括学号.姓名.出生日期.性别.把N个学生的信息放入一个集合中.可以根据学号,对学生信息进行检索.并可以根据生日进行排序输出. Student.java package Collec ...
- 设一个学生的信息包括学号、姓名、出生日期和性别等。把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出。
设一个学生的信息包括学号.姓名.出生日期和性别等.把n个学生的信息放入一个集合中,可以根据学号对学生信息进行检索,并且可以根据出生日期对学生进行排序输出. 要求 对于每个学生的个人信息,可以定义一个类 ...
- Android:如何将Enum放入捆绑包中?
本文翻译自:Android: How to put an Enum in a Bundle? 如何将Enum对象添加到Android Bundle? #1楼 参考:https://stackoom.c ...
- char N2Char(int n)函数:将一个整数转换为字符串,并放入一个字符串中
//将一个整数转换为字符串,并放入一个字符串中 char N2Char(int n)//一次只能转换一个数 {int i;char c;if ((i = n / 10) != 0)N2Char(i); ...
- Linux下将数据文件的指定域读取到shell脚本中
Linux下将数据文件的指定域读取到shell脚本中 这个例子说明了怎样在Linux下shell脚本中从数据文件读取特定的域(field)并进行操作.例如,假设文件employees.txt的格式是{ ...
- 将 Bean 放入 Spring 容器中的方式
文章目录 将 Bean 放入 Spring 容器中的方式 1.@Configuration + @Bean 2.@Componet + @ComponentScan 3.@Import注解导入 3.1 ...
- R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).如果没有指定行标识符号,则所有的字段都会放入variable变量中 目录
- Python产生100个1—100的随机数放入列表Num中,输出列表中的数,然后将它们排序,并输出排序结果。
import random #内建函数 Num=[] for i in range(101):Num.append(random.randint(1,100)) #append()将参数添加到列表末尾 ...
最新文章
- c++.net 托管类封装非托管类
- CV之路——opencv基本操作
- 【机器学习基础】一文归纳AI数据增强之法
- Event/window.Event属性和方法
- 浅释一下,为什么要使用接口?
- python中strip、startswith、endswith
- Springboot Vue Login(从零开始实现Springboot+Vue登录)
- python下载网页中的pdf文件_Python读取网页上的pdf文件,输出字符串
- call和calling的用法_call的用法及短语例句
- Ecipse:calculating requirements and dependencies(长时间阻塞问题)
- android5.1不生成odex
- js高级学习笔记-14-从函数运行和内存角度理解闭包
- 运营商线路细分_国内三大运营商宽带线路及分级介绍
- m4s格式转换mp3_音乐怎么转换mp3格式
- 第二次作业-语言和文法
- 重磅!中国芯片新锐50强榜单发布,上海20家、北京仅4家!(附:详细解读)...
- Android App links 链接打开app功能
- 【操作系统概念-作业6】CPU Scheduling
- WEB、WEB标准、W3C的理解
- 中国计算机仿真行业全景调查与投资策略建议报告2022-2028年版