私は初めてBashに触れて、私の質問に答えるための良いチュートリアルを見つけることができません。
array=( item1 item2 item3 )
for name in ${array[@]}; do
echo current/total
... some other codes
done
期待される出力で合計値をcurrent
計算したいと思います。total
1/3
2/3
3/3
どんなヒントでもくれてありがとう。
答え1
たとえば、次を使用して配列インデックスにアクセスし、 を使用して配列の長さ${!array[@]}
にアクセスできます。${#array[@]}
#!/bin/bash
array=( item1 item2 item3 )
for index in ${!array[@]}; do
echo $index/${#array[@]}
done
bashの配列は次のとおりです。ゼロインデックス、実際には次のようになります。
0/3
1/3
2/3
カウントを1から始めるには、に$index
置き換えます$((index+1))
。欲しいなら価値利用可能なインデックス、"${array[index]}"
つまり
#!/bin/bash
array=( item1 item2 item3 )
for index in ${!array[@]}; do
echo $((index+1))/${#array[@]} = "${array[index]}"
done
与える
1/3 = item1
2/3 = item2
3/3 = item3
答え2
インデックスが実際にインデックスであると考えると、ゼロインデックスは完全に有効です。オフセット配列のベースアドレスから始まります。実際に方言によって異なりますが、これが標準です。以前のJovial言語では、[0]
配列の最大サイズが実際に含まれていました。だから始まります[1]
。
0
一部の基本実装では、オプションで使用することも、最初のインデックスとして1
使用することもできます。そして、少なくとも1つのBasicを使用すると、からの[n]
インデックス配列を指定できます[m]
。ここでn
sum は .小さいか等しい場合は、任意の整数m
値、負の数にすることができます。インデックスが対応するように、入力値からその値を減算します。n
m
n
[index]
index-n = 0
n
ただし、自分のコードで同じことを行うことができます。次のように配列の順序を逆にすることもできます。
dim array(0, abs(m-n));
step=sign(m-n);
if n > m then
base=m
else
base=n;
fi
このコード例は実際には言語の一部にすぎません。もっと読みやすくしたいです。ステップ変数は、正であるか負であるかに応じて、動きの見かけの方向を制御するために使用され、配列に入ったり出たりするときに実際には常に正の有効インデックスを計算するために使用されます[0]
。