2016-12-01 9 views
0

私はこれにかなりのポストを見つけましたが、問題を解決するためにピースをまとめて入れることができませんでした。 array2のi番目の要素の最初の5つの文字が最初の5と一致した場合、私は具体的にはそう2つのbashアレイ内のパターンマッチング

array3=(adir anicedir) 

のような第三の配列を持っていると思い

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

:だから私は2つの配列を持っていると言いますarray1の任意の要素の文字を次にarray2[i]と置き換えます。array1[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

関連する問題