題目描述

輸入的每行都是一個國家名稱,請將著些國家名稱讀取到一個陣列中儲存,接著把名稱有包含「a」或「A」的元素過濾掉,輸出過濾之後的結果。



原題網址

輸入格式

輸入的每行都是一個國家名稱,只會有大小寫英文字母和連字符號「-」。

輸出格式

將含有「a」或「A」的國家名稱過濾掉之後,輸出剩下來的國家名稱,用空白字元隔開。如果所有國家名稱都被過濾掉了,則輸出空行。

範例輸入

Namibia
Nauru
Nepal
Netherlands
NewZealand
Nicaragua
Niger
Nigeria
NorthKorea
Norway

範例輸出

Niger

額外解釋

輸入的國家名稱中,只有「Niger」沒有包含「a」或「A」字元。

解題概念

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

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

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

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

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

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

如果要印出陣列中所有的內容,可以使用「@」符號來取代索引值。格式如下:

echo ${陣列名稱[@]}

使用「@」符號的話,也可以搭配樣本(Pattern)來過濾掉不想要輸出的元素,格式如下:

echo ${陣列名稱[@]/樣本/}

符合樣本的元素將不會被輸出。因此如果不想輸出「Ni」開頭的元素,可以將echo命令寫成:

echo ${陣列名稱[@]/Ni*/}

如果不想輸出包含「a」字元的元素,可以將echo命令寫成:

echo ${陣列名稱[@]/*a*/}

樣本在預設情況下是會區分大小寫的。如果不想區分大小寫,可以改用中括號來撰寫規則,如下:

echo ${陣列名稱[@]/*[aA]*/}

參考答案

#!/bin/bash

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

echo ${array[@]/*[aA]*/}