Bashで配列の要素にaが含まれていることがわかった場合は、K
その要素に1000を掛けてその要素を製品に設定したいと思います。
for i in "${stats_array[@]}"
do
if echo "$i" | grep -q K; then
# set that value to that value times 1000
fi
done
Bashスクリプトではどうなりますか?
私の配列は次のとおりです。
stats_array: 1, 54, 54K, 99
私はそれが次のように見えるようにしたいです:
stats_array: 1, 54, 54000, 99
答え1
$ { IFS=, ; arr=( 1,54,54K,99k ); }
$ printf '%s\n' ${arr[@]}
1
54
54K
99k
## note: enable extended pattern matching for [...] with 'shopt -s extglob'
$ rearr=( "${arr[@]//%[Kk]/000}" )
$ printf '%s\n' ${rearr[@]}
1
54
54000
99000
## or write the changes to same array
$ arr=( "${arr[@]//%[Kk]/000}" )
また見なさい:Bashで配列に要素を追加/削除する方法は?
答え2
繰り返し索引値の配列なので、新しい値を設定するのは簡単です。
これはグローバルスキーマから分岐するために使用されますcase
。これを拡張するのは簡単ですM
。G
stats_array=( 1 54 54K 99 )
for idx in "${!stats_array[@]}"; do
value=${stats_array[idx]};
case $value in
*K) stats_array[idx]=$(( ${value%K} * 10**3 )) ;;
esac
done
declare -p stats_array
declare -a stats_array=([0]="1" [1]="54" [2]="54000" [3]="99")
Bash算術は浮動小数点数を処理できないため、53.9K
次のように変換することは期待できません。53900