2011-12-17 30 views
9

vorrei impostare elementi di un array con il ciclo:Shell array di script

for i in 0 1 2 3 4 5 6 7 8 9 
do 
array[$i] = 'sg' 
done 

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

Così non funziona. Come ..?

+1

Conosci il comando seq? puoi sostituire i tuoi numeri con $ (seq 0 9) – Miquel

+3

@Miquel: o solo '{0..9}'. –

+0

È necessario fare attenzione, poiché alcune shell non hanno array. Se si desidera scrivere sh portatile, non è possibile utilizzare gli array. –

risposta

7

Rimuovere gli spazi:

array[$i]='sg' 

Inoltre, si dovrebbe accedere agli elementi come *:

echo ${array[0]} 

Vedi esempio http://tldp.org/LDP/abs/html/arrays.html.


* Grazie a @Mat per avermi ricordato di questo!

1

c'è problema con la sua dichiarazione di eco: danno ${array[0]} e ${array[1]}

2

Dovrebbe funzionare se si fosse dichiarata la variabile come array e stampare in modo corretto:

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

vederlo in azione here .

HTH

0

mio prendere su quel ciclo:

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

O ancora più semplice:

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

Vedi http://ideone.com/DsQOZ per qualche prova. Nota anche, bash 4 + readarray:

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

In effetti, readarray è più versatile, ad es. ottenere i primi 10 PID di processi con bash nel nome in matrice (che potrebbe restituiscono un formato matrice < 10 se non ci sono 10 tali processi):

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

ha aggiunto readarray, che ha il suo posto per consentire facilmente lo spazio bianco incorporato – 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 

uscita:

Google
Yahoo
Bing
Blekko
Rediff