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

时间:2014-02-06 12:58:44

标签: linux shell

如何将字符串拆分为数组?

#!/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

2 个答案:

答案 0 :(得分:2)

要在dash(不支持数组)中拆分变量,请使用:

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

答案 1 :(得分:0)

在bash中你可以这样做:

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

IFS是输入字段分隔符。

Zsh更优雅

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

你甚至可以直接这样做

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