2014-02-06 60 views
0

如何将字符串拆分为数组?将字符串拆分为数组,其中长度不固定(不是bash)

#!/bin/sh 

例如,

str="field 1,field 2,field 3,field 4" 

数组的长度是不同的

已经找到了很多解决方案,但他们只在bash工作

更新

这只能如果数组的长度有4个值,但如果它有10个值呢?

for循环似乎不工作

arr=$(echo "field 1,field 2,field 3,field 4" | awk '{split($0,a,","); print a[1],a[2],a[3],a[4]}'); 

for value in ${arr[@]} 
do 
    echo "$value\n" 
done 
+0

由什么做分离器要分割字符串? ''''' –

+0

普通的POSIX shell根本不支持数组。你需要使用一个shell('bash','zsh',可能是其他的)。 – chepner

回答

2

要获得分成短跑中的变量(不支持数组)使用方法:

string="field 1,field 2,field 3,field 4" 
IFS="," 
set -- $string 
for val 
do 
    echo "$val" 
done 
+0

如何将所有值分配给变量?以及如果数组长度超过4个值? – clarkk

+0

由awk返回的数组将与输入中的字段一样长。我不确定你的意思是把值赋给变量 – mikea

+0

已经更新了这个问题..在你检查你只打印了4个值,但是如果数组有10个值呢? for循环似乎没有工作,或者 – clarkk

0

在bash中,你可以做这个:

str="field 1,field 2,field 3,field 4" 
IFS=, array=($str) 

IFS是输入字段分隔符。

岩组是更优雅

array=${(s:,:)str} 

你甚至可以做到这一点直接

% for i in "${(s:,:)str[@]}"; do echo $i; done 
field 1 
field 2 
field 3 
field 4 
+0

这不是bash – clarkk

+0

然后使用第一个 – Kevin

+0

第一个(前两行独自)返回一个错误'test.sh:4:test.sh:语法错误:“(”意想不到' – clarkk

相关问题