2016-09-17 28 views
1

這是我的代碼。如何在bash中的數組中使用偏移量?

#! /bin/bash 
array=(3 2 1 0 0 0 0 0 0 0) 
for i in {0..10} 
do 
    this=${array:$i:$((i+1))} 
    echo $this 
done 

我想分別打印我的號碼的每個號碼。我已經使用這一行來獲取使用偏移數字的數組元素。

this=${array:$i:$((i+1))} 

但是,我只得到3印刷和休息都是新行。我基本上想分開打印3,2,1等。我該如何糾正?

回答

3

首先,你需要使用全陣列array[@],不array

echo "${array[@]:3:2}" 

然後,您可以將指標改爲簡單的變量名:

this=${array[@]:i:i+1} 

然後,你可能需要提取列表中只有一個值:

this=${array[@]:i:1} 

試試這個代碼:

array=(3 2 1 0 0 0 0 0 0 0) 
for i in {0..10} 
do 
    this=${array[@]:i:1} 
    echo "$this" 
done 
1

在這裏沒有理由使用數組切片,只需訪問數組的各個元素。試試這個:

#! /bin/bash 
array=(3 2 1 0 0 0 0 0 0 0) 
for i in {0..10} 
do 
    this=${array[$((i+1))]} 
    echo $this 
done 

一般來說,你可以像這樣訪問一個數組的單個元素:${array[3]}

注意,在這種情況下,這本來是最好這樣做:

array=(3 2 1 0 0 0 0 0 0 0) 
for this in "${array[@]}" 
do 
    echo $this 
done 
+0

如果數組是字符串呢? – posixKing

+0

@lufork你是什麼意思?如果元素是字符串?這應該不重要。 – redneb

+0

像例如說我的數組存儲一個包含「3 2 1 0 0 0 0 0 0 0」的行,那麼我可以使用數組[3]訪問第3個元素嗎? – posixKing