2014-01-11 65 views
5

鑑於殼牌下面的數組編程陣列上使用grep找話

富=(SPI SPID蜘蛛蜘蛛俠吧lospia)

我想用grep來搜索所有詞SPI SPI蜘蛛蜘蛛俠lospia

0:它具有3個字母 spi

正確的輸出陣列中的

我已經試過這樣的事情

foo=(spi spid spider spiderman) 

grep "spi" foo 

但現在看來,這是錯的,什麼是去做正確的方法???

回答

2

下面將打印出包含SPI所有詞:

foo=(spi spid spider spiderman bar) 
for i in ${foo[*]} 
do 
    echo $i | grep "spi" 
done 
11

最簡單的解決辦法是將管陣列元件到的grep:

printf -- '%s\n' "${foo[@]}" | grep spi 

有兩點要注意:

printf是bash內建的,你可以用man printf來查找它。 --選項告訴printf,後面的任何內容都不是命令行選項。這可以防止foo數組中的字符串被解釋爲這樣。

"${foo[@]}"的表示法將數組的所有元素作爲獨立參數展開。總體而言,數組中的單詞被放入一個多行字符串中,並被傳送到grep中,該單詞匹配spi

2
IFS=$'\n' ; echo "${foo[*]}" | grep spi 

這將產生輸出:

spi 
spid 
spider 
spiderman 
lospia