Shell脚本数组

9
我想使用循环设置数组元素:
for i in 0 1 2 3 4 5 6 7 8 9
do
array[$i] = 'sg'
done

echo $array[0]
echo $array[1]

所以它不起作用。 如何解决?


1
你知道seq命令吗?你可以用$(seq 0 9)替换你的数字。 - Miquel
你需要小心,因为有些shell没有数组。如果你想要可移植的sh,就不能使用数组。 - William Pursell
这绝对是一个bashism,我已经修复了标签。 - GreyCat
5个回答

7

2
如果您将变量声明为数组并正确打印它,则应该可以正常工作:
declare -a array
for i in 0 1 2 3 4 5 6 7 8 9 
do
    array[$i]="sg"
done
echo ${array[0]} 
echo ${array[1]} 

点击此处查看实际效果。

希望对你有所帮助。


1

你的echo语句有问题:给出${array[0]}${array[1]}


1
# Declare Array

NAMEOFSEARCHENGINE=( Google Yahoo Bing Blekko Rediff )

# get length of an array
arrayLength=${#NAMEOFSEARCHENGINE[@]}

# use for loop read all name of search engine
for (( i=0; i<${arrayLength}; i++ ));
do
  echo ${NAMEOFSEARCHENGINE[$i]}
done

输出:

Google
Yahoo
Bing
Blekko
Rediff


0

我对那个循环的看法:

array=( $(yes sg | head -n10) )

甚至更简单:
array=( sg sg sg sg sg sg sg sg sg sg )

请查看http://ideone.com/DsQOZ以获取一些证明。还要注意,bash 4+ readarray:

readarray array -t -n 10 < <(yes "whole lines in array" | head -n 10)

事实上,readarray 是最通用的,例如,使用带有 bash 名称的进程的前 10 个 PID 填充数组(如果没有这样的进程,则可能返回大小小于 10 的数组):
readarray array -t -n 10 < <(pgrep -f bash)

添加了readarray,它可以轻松地允许嵌入式空格,非常实用。 - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接