100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > linux中如何分割字符串数组中 关于bash:linux shell脚本:拆分字符串 将它们放入一

linux中如何分割字符串数组中 关于bash:linux shell脚本:拆分字符串 将它们放入一

时间:2023-06-25 02:10:48

相关推荐

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脚本

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。