2011-12-17 37 views
9

Tôi muốn thiết lập các phần tử mảng với vòng lặp:mảng kịch bản 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] 

Vì vậy, nó không hoạt động. Làm thế nào để ..?

+1

Bạn có biết lệnh seq không? bạn có thể thay thế các số của mình bằng $ (seq 0 9) – Miquel

+3

@Miquel: hoặc chỉ '{0..9}'. –

+0

Bạn cần phải cẩn thận, vì một số hệ vỏ không có mảng. Nếu bạn muốn ghi sh xách tay, bạn không thể sử dụng mảng ở tất cả. –

Trả lời

7

Tháo gian:

array[$i]='sg' 

Ngoài ra, bạn nên truy cập vào các yếu tố như *:

echo ${array[0]} 

Xem ví dụ http://tldp.org/LDP/abs/html/arrays.html.


* Nhờ @Mat đã nhắc tôi về điều này!

1

có vấn đề với echo tuyên bố của bạn: cung cấp cho ${array[0]}${array[1]}

2

Nó sẽ làm việc nếu bạn đã tuyên bố biến của bạn như mảng, và in nó đúng cách:

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

Nhìn thấy nó trong hành động here .

HTH

0

Đưa tôi về vòng lặp rằng:

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

Hoặc thậm chí đơn giản hơn:

array=(sg sg sg sg sg sg sg sg sg sg) 

Xem http://ideone.com/DsQOZ đối với một số bằng chứng. Cũng lưu ý, bash 4+ readarray:

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

Thực tế, readarray là linh hoạt nhất, ví dụ: nhận được 10 PID đầu quá trình với bash trong tên vào mảng (có thể trả về một kích thước mảng < 10 nếu không có 10 quy trình như vậy):

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

thêm readarray, có vị trí cho phép dễ dàng nhúng khoảng trắng – sehe

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 

Output:

Google
Yahoo
Bing
Blekko
Rediff

Các vấn đề liên quan