2012-11-07 95 views
4

我想动态地创建和填充一个数组,但它并没有这样的工作:创建Bash阵列动态

i=0 
while true; do 
    read input 
    field[$i]=$input 
    ((i++)) 
    echo {$field[$i]} 
done 
+0

您的实际问题是什么?除了一些小问题,你的代码没问题。 – ormaaj

+0

它像一个简单的变量。如果我的输入是测试,它会回显:{test [0]} – Sadiel

+0

我没有在那里看到任何'echo'。你只是有一个无限循环来追加一个数组,并对它做任何事情。是的扩展''$ test“'总是等价于''{{test [0]}”'(即使'test'不是数组)。 – ormaaj

回答

7

作业很好;查找错误:

echo ${field[$i]} 
2
i= field=() 
while :; do 
    read -r 'field[i++]' 
done 

是单向的。另一个是mapfile。或者任何these。然而你发布的内容是有效的。

4

尝试这样:

#! /bin/bash 
field=() 
while read -r input ; do 
    field+=("$input") 
done 
echo Num items: ${#field[@]} 
echo Data: ${field[@]} 

它停止读取时,没有更多的输入可用(文件,^D在键盘的结束),然后打印元素读取,并把数整个阵列。