2013-01-18 108 views
1

首先,让我说我对Bash脚本非常陌生。我试图寻找我的问题的解决方案,但无法找到任何适合我的工作。
假设我要使用bash解析,看起来像一个文件中的以下内容:Bash:将字符串拆分为数组

cat /path/to/my.file | while read line; do 
    echo $line  
done 

$line可变我:

variable1 = value1 
variable2 = value2 

我用下面的代码分裂由行的文件行想要创建一个我想用=作为分隔符来分割的数组,以便我可以像这样从数组中获取变量名称和值:

$array[0] #variable1 
$array[1] #value1 

这样做的最好方法是什么?

回答

4

组IF为“=”,以分裂=符号串在你的台词,即:

cat file | while IFS='=' read key value; do 
    ${array[0]}="$key" 
    ${array[1]}="$value" 
done 

您可能还可以使用-a参数来指定一个数组来写进入,即:

cat file | while IFS='=' read -a array; do 
    ... 
done 

bash版本取决于。

老完全错误的答案留给后人:

参数-d =添加到您的read声明。然后可以这样做:

cat file | while read -d = key value; do 
    $array[0]="$key" 
    $array[1]="$value" 
done 
+0

添加-d参数给了我'read:Illegal option -d',是用于执行此操作的另一个命令的-d参数吗? –

+0

呃,其实是错的,-d应该是行结束符。环境变量IFS控制分割。不知道你的阅读为什么不支持-d。 – Steve

+1

不幸的是,在'read'中使用'-d'不符合POSIX标准。 –

3
while IFS='=' read -r k v; do 
    : # do something with $k and $v 
done < file 

IFS是“内字段分隔符”,这是告诉bash分裂上的“=”符号的行。