題目描述

給定一個國家名稱的清單,請將這份清單存入陣列中,並以空格分隔重新將陣列中索引範圍為3到7(包含3和7)的元素輸出。



原題網址

https://www.hackerrank.com/challenges/bash-tutorials-slice-an-array

輸入格式

輸入國家名稱的清單,以換行字元分隔。每個國家名稱都是由英文字母和「-」字元組成。

輸出格式

輸出陣列中索引範圍為3到7(包含3和7)的國家名稱。以空格分隔不同國家。

範例輸入

Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway

範例輸出

Netherlands NewZealand Nicaragua Niger Nigeria

解題概念

Bash的陣列元素可以直接使用以下格式來指派:

陣列名稱[索引值]=元素

若之後要取得陣列的元素內容,可以這樣寫:

${陣列名稱[索引值]}

分別將輸入的各行作為元素存到陣列中,Bash可以這樣寫:

i=0
array=
while read LINE
do
    array[$i]=$LINE
    ((i += 1))
done

在兩組小括號中可以直接進行數值計算。

接著使用for迴圈便可以輕易地走訪陣列的所有元素:

for (( n = 0; n < i; n += 1 ))
do
    # do something
done

如果要走訪索引3到7的元素,可以這樣寫:

for (( n = 3; n < 7; n += 1 ))
do
    # do something
done

參考答案

#!/bin/bash

i=0
array=
while read LINE
do
    array[$i]=$LINE
    ((i += 1))
done

for (( n = 3; n <= 7; n += 1 ))
do
    printf ${array[$n]}
    if (( n != 7 )) ; then
        printf ' '
    fi
done