2016-10-08 8 views
0

bashは増分

#! /bin/bash 

declare -a input # unnecessary 
declare -a bad 
declare -a good # unnecessary 

input=('alpha 23' 'bravo 79' 'charlie 12') 
echo "input is " ${#input[@]} "long" 
for x in "${input[@]}" 
do 
    bad=$x 
    good[ ${#good[@]} ]=$x 
    echo 
    echo "added '$x', good is now " ${#good[@]} "long, bad is still " ${#bad[@]} "long" 
done 

以下のコードを出力はbashのmanページによれば

input is 3 long 

added 'alpha 23', good is now 1 long, bad is still 1 long 

added 'bravo 79', good is now 2 long, bad is still 1 long 

added 'charlie 12', good is now 3 long, bad is still 1 long 

ある...「場合、インデックス付きアレイに割り当てる際に考慮アレイに追加しますオプションの角かっこと添え字が指定されている場合、そのインデックスは、に割り当てられます。割り当てられた要素のインデックスは、ステートメントと1つのに割り当てられた最後のインデックスです。

私は、「bad = $ x」という文が実行されるたびにインデックスを自動的にインクリメントすることを期待していたので、太字の部分はわかりません。毎回悪い[0]に割り当てられておらず、割り当てられています。

は、なぜそれが私が期待したものやっていないと私は良いに割り当てる不器用なラインよりもコードを書くのより良い方法がある[は..]

+0

[Bash:キーを指定せずに配列に値を追加](http://stackoverflow.com/q/1951506/3 776858) – Cyrus

答えて

2

あなたが引用された部分が割り当てではなく、ほかにも関します:

array=([0]=zero [1]=one [2]=two) 

は、実際には、

と同じである、

array=([0]=zero one two) 

と等価です

array=(zero one two) 
アレイに追加するには、 +=使用:

array+=(three) 
+0

それは今より感謝します、ありがとう。上記のコードでbad = = xをbad + =( "$ x")に置き換えると、私は必要な答えを得ます。 –

0

chorobaは私の質問に答えた、正しいコードは次のようになり

#! /bin/bash 

input=('alpha 23' 'bravo 79' 'charlie 12') 
echo "input is " ${#input[@]} "long" 
for x in "${input[@]}" 
do 
    output+=("$x") 
done 

echo "output = (" ${output[@]} ") and is " ${#output[@]} " long " 

それは、スキャンおよびパラメータのリストを処理するのに便利ですパラメータにスペースや他の扱いにくい文字が含まれているスクリプト