shell中数组怎么循环赋值,急

比如java中的:
for(int i=1;i<=100;i++)
{
name[i]=i;
}
在shell中怎么实现?

Bash环境可以这样。

#!/bin/bash

for ((i=1;i<=100;i++))

do

name[$i]=$i

echo ${name[$i]} #为方便检查,加了打印

done

通用点的(符合POSIX标准)可以这样:

#!/bin/sh

declare -a name

for i in `seq 100`

do

name[$i]=$i

echo ${name[$i]} #为方便检查,加了打印

done

bash手册 arrays章节第一段话的某一句:

数组的大小没有上限,也没有限制在连续对成员引用和赋值时有什么要求。数组以整数为下标,从 0 开始。

使用cat的话可以这样:

cat 123.txt | while read line

do

echo "$line"

done

123.txt的每行读取到变量line中并输出。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-25
Bash环境可以这样。
#!/bin/bash
for ((i=1;i<=100;i++))
do
name[$i]=$i
echo ${name[$i]} #为方便检查,加了打印
done

通用点的(符合POSIX标准)可以这样:
#!/bin/sh
declare -a name
for i in `seq 100`
do
name[$i]=$i
echo ${name[$i]} #为方便检查,加了打印
done追问

都会报错

追答

同样是Ubuntu 10.10,不会报错。
书写时请注意空格,关键词for后面要有空格

追问

加了空格一样错

追答

我看了你下面的程序,
关键问题在于,你声明为了 #!/bin/sh,而sh环境是不能用 for((i=0; i<100; i++)) 这种不符合POSIX标准的语句的。只能用我的第二种方法。 for ... in ... 这种语句是支持的。或者用while循环,变量在循环中递增。

追问

#!/bin/sh
for i in 1 2 3
do
name[$i]=$i
done
name[1]=1:not found
name[2]=1:not found
name[3]=1:not found

说实话,从没接触过象shell这么渣的语言。一点规范都没

追答

for循环前加上这句试试:
declare -a name
声明name为数组变量

追问

加不加都试过了,都错

追答

ubuntu中默认的shell是dash,是不支持数组的。
ls -l /bin/sh 可以看到sh是个指向dash的链接,所以你声明#!/bin/sh其实还是用的dash。
我忘记自己曾经配置过Ubuntu了。如下:
=========================================
怎么能把 dash 去掉而使用默认的 bash?
使用命令:sudo dpkg-reconfigure dash
此命令是对已安装的包进行重新配置,在菜单(dash-bash-sh.png)中选择是否将 sh 链接到 dash (Install dash as /bin/sh?) 选择否即可。具体请到百度文库中搜索“Ubuntu把默认的bash替换成了dash“,里面有一张图片说明。
还有另一种不太好看的办法,请百度搜索“Shell中模拟数组”。

本回答被提问者和网友采纳
第2个回答  2012-12-26
其实差不多
for((i=1;i<=100;i++))
do
name[$i]=$i;
done
shell里需要加 do 和done 限定循环的范围追问

#!/bin/sh
for((i=1;i<=100;i++))
do
name[$i]=$i
done
echo ${name[@]}
Syntax error:Bad for loop variable
难道是我系统问题,ubuntu10.10

追答

应该是你系统的问题,我这边的都是红帽的系统,但是原理上都差不多啊,你换成bash试一下

追问

bash和sh都通不过

追答

Shell的兼容问题吧。
那你就试试遍历可不可行。

for i in `seq 1 100`
do
name[$i]=$i;
done
echo ${name[@]}

追问

for i in `seq 1 100`
do
name[$i]=$i;
done
name[seq: not found
加不加分号都是这个

追答

我大概知道了 我猜你用的是 `seq 1 100` 是单引号,
其实这个是反引号
是在大键盘1 左边的那个键 ---> ~
就是进入一个子进程,去处理seq 1 100,(就是打印从1 2 3 ... 100),然后 for i in 1 2 3 4 ...

追问

我重新用你说的那个键,在sh和bash下,不管加不加分号,都是:
name[1]=1:not found
(中间省略98行)
name[100]=100:not found

追答

就是tab 上边的那个键
你直接用数组赋值试试: name[1]=1 试试

追问

我用的是你说的那个键,这种简单的赋值没问题,放在循环里面就错。

追答

你加一个 -x 做一下追踪,把循环的次数调低,或者先不用seq 直接用 for i in 1 2 3 4
然后在shell终端 用seq 1 10 看看输出什么

第3个回答  2012-12-27
i=1;
while(test i -le 100)
do
name[$i]=$i;
i=$[$i+1];

done
第4个回答  2012-12-26
for((i=0; i<100; i++))
do
name[$i]=$i
done
echo ${name[@]}追问

#!/bin/sh
for((i=1;i<=100;i++))
do
name[$i]=$i
done
echo ${name[@]}
Syntax error:Bad for loop variable
难道是我系统问题,ubuntu10.10

追答

#!/bin/sh

改成
#!/bin/bash

试试看
估计是你的shell不是bash,我写的这个是bash的语法

相似回答