2016-09-17 68 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