我在 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)
演示 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)
请注意,迭代关联数组时,不会保留条目的顺序。