在循环中分割字符串

Sta*_*l l 0 bash

我在 bash 中有一个数组声明如下:

declare -a StringArray=("A:100" "B:200" "C:300" "D:400 )
Run Code Online (Sandbox Code Playgroud)

我正在尝试循环并能够打印出以下格式:

Letter - A
Value - 100
Letter - B
Value - 200
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但它只是打印出整个字符串,如下所示:

Letter - A:100
Value
Letter - B:200
Run Code Online (Sandbox Code Playgroud)
export IFS=':'

for val in "${StringArray[@]}"; do
  echo "Letter - ${val[0]}"
  echo "Value - ${val[1]}"
done
Run Code Online (Sandbox Code Playgroud)

Léa*_*ris 5

演示 IFS 字符串分割和关联数组创建:

#!/usr/bin/env bash

declare -a StringArray=("A:100" "B:200" "C:300" "D:400" )

IFS=:
printf 'Letter - %s\nValue - %s\n' ${StringArray[@]}

declare -A StringAssoc="($(printf '[%q]=%q ' ${StringArray[@]}))"

typeset -p StringAssoc

for k in "${!StringAssoc[@]}"; do
  printf 'Letter - %s\nValue - %s\n' "$k" "${StringAssoc[$k]}"
done
Run Code Online (Sandbox Code Playgroud)

输出:

Letter - A
Value - 100
Letter - B
Value - 200
Letter - C
Value - 300
Letter - D
Value - 400
declare -A StringAssoc=([D]="400" [C]="300" [B]="200" [A]="100" )
Letter - D
Value - 400
Letter - C
Value - 300
Letter - B
Value - 200
Letter - A
Value - 100
Run Code Online (Sandbox Code Playgroud)

请注意,迭代关联数组时,不会保留条目的顺序。