2016-12-01 28 views
0

我在這發現了不少帖子,但無法將這些帖子放在一起解決我的問題。所以說我有兩個數組:在兩個bash陣列內匹配模式

array1=(adir bdir anicedir) 
array2=(adir anice) 

我想有一個第三陣列像這樣

array3=(adir anicedir) 

更具體地,如果在array2前5個字符的第i個元件的匹配第一5 array1中的任何元素的字符然後用替換array2[i]

回答

2

沒有什麼特別的短,因爲bash不是數據處理語言。你需要使用一個循環。

array1=(adir bdir anicedir) 
array2=(adir anice) 
array3=() 

for val2 in "${array2[@]}"; do 
    for val1 in "${array1[@]}"; do 
     if [[ ${val1:0:5} == "${val2:0:5}" ]]; then 
      array3+=("$val1") 
      break 
     fi 
    done 
done 

引用==的右側可確保執行文字字符串比較而非模式匹配。

+0

我試過,但'echo $ {array3 [@]}'沒有輸出...... – Manfredo

+0

好吧,儘管它仍然沒有輸出。 'echo $ {array3 [@]}'給你正確的輸出嗎? – Manfredo

+0

現在我得到'echo $ {array3 [@]} adir anice',但它應該是'echo $ {array3 [@]} adir anicedir'。無論如何,它已經有所幫助,我會試圖弄清楚。謝謝 – Manfredo