2011-12-17 145 views
9

我想設置數組元素與循環:shell腳本陣列

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 2011-12-17 16:06:22

+3

@Miquel:或者只是'{0..9}'替換你的數字。 – 2011-12-17 16:08:57

+0

你需要小心,因爲有些炮彈沒有陣列。如果你想寫可移植的sh,你根本不能使用數組。 – 2011-12-17 16:49:43

回答

1

有一個與你的echo語句的問題:給${array[0]}${array[1]}

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]} 

看到它在行動here

HTH

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是最通用的,例如,得到的前10 PID的名稱中使用bash流程進入陣列(如果沒有10這樣的過程可能返回一個數組大小< 10):

readarray array -t -n 10 < <(pgrep -f bash) 
+0

增加了readarray,它可以輕鬆地允許嵌入的空白 – sehe 2011-12-18 19:52:41

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 

輸出:

谷歌
雅虎

Blekko的
Rediff的