2017-09-11 9 views
1

配列に要素を追加するときのtemp変数の違いを説明するのに役立つ人はいますか?temp変数を使用すると、配列に異なる結果が生成される

#!/bin/bash 

declare -a finaldirs1 
declare -a finaldirs2 

declare -a files=("Planes" "Trains" "Automobiles") 

echo "A)..................................." 
for el1 in "${files[@]}"; do 
    tmpe=$(printf "1:%s." "${el1}") 
    finaldirs1+=($tmpe) 
done 
for elA in "${finaldirs1[@]}"; do 
    echo "First: " $elA 
done 

echo "B)..................................." 
for el2 in "${files[@]}"; do 
    finaldirs2+=$(printf "2:%s." "${el2}") 
done 
for elB in "${finaldirs2[@]}"; do 
    echo "Second: " $elB 
done 
echo "DONE................................." 

要するに、2番目のバージョンには何らかの形ですべての要素がまとめられています。出力:

A)................................... 
First: 1:Planes. 
First: 1:Trains. 
First: 1:Automobiles. 
B)................................... 
Second: 2:Planes.2:Trains.2:Automobiles. 
DONE................................. 

答えて

2

であるべき。

#!/bin/bash 

declare -a finaldirs1 
declare -a finaldirs2 

declare -a files=("Planes" "Trains" "Automobiles") 

echo "A)..................................." 
for el1 in "${files[@]}"; do 
    tmpe=$(printf "1:%s." "${el1}") 
    finaldirs1+=($tmpe) 
done 
for elA in "${finaldirs1[@]}"; do 
    echo "First: " $elA 
done 

echo "B)..................................." 
for el2 in "${files[@]}"; do 
    finaldirs2+=($(printf "2:%s." "${el2}")) 
done 
for elB in "${finaldirs2[@]}"; do 
    echo "Second: " $elB 
done 
echo "DONE................................." 

あなたはarr+='element'は単なる文字列arrに追加だろうが、それは、arr+=('element')のように行うの配列に追加し、参照してください。

2
finaldirs2+=$(printf "2:%s." "${el2}") 

あなたは括弧のカップルを逃した

finaldirs2+=($(printf "2:%s." "${el2}")) 
関連する問題