在我的文本文件中,我有这个:
wordA | wordC
wordB | wordD
我想拥有这个数组:
arr=(wordA|wordC wordB|wordD)
arr[0]=(wordA wordC)
arr[0][0]=(wordA)
arr[0][1]=(wordC)
arr[1]=(wordB wordD)
arr[1][0]=(wordB)
arr[1][1]=(wordD)
编辑:如果这不可能,我怎么能有这个数组:
arr1=(wordA wordB)
arr2=(wordC wordD)
答案 0 :(得分:0)
如前所述,Bash不支持真正的2D数组,但可以使用关联数组进行模拟。
这样的东西似乎在我的测试中正常工作:
a=$'a|c\nb|d'
echo "$a" && echo
declare -A array
IFS=$'\n' read -r -d '' -a arr1 <<<"$a"
#declare -p arr1
for ((i=0;i<"${#arr1[@]}";i++));do
IFS="|" read -r -a arr2 <<<"${arr1[$i]}"
for ((k=0;k<"${#arr2[@]}";k++));do
array[$i,$k]="${arr2[$k]}"
done
done
declare -p array
输出:
a|c
b|d
declare -A array='([0,0]="a" [0,1]="c" [1,0]="b" [1,1]="d" )'
所以我们创建了一个名为&#34; array&#34;的关联数组。可以采用以下格式:
echo "${array[1,0]}"
#Output
b
您可以使用经典的双循环或使用
更简单地遍历数组的所有键for key in "${!array[@]}";do
echo "$key - ${array[$key]}"
done
0,0 - a
0,1 - c
1,0 - b
1,1 - d
答案 1 :(得分:-1)
不完全是,但你明白了:
arr=(wordA\|wordC wordB\|wordD)
echo "${arr[0]%|*}" # arr[0][0]
echo "${arr[0]#*|}" # arr[0][1]
echo "${arr[1]%|*}" # arr[1][0]
echo "${arr[1]#*|}" # arr[1][1]
当您从文件中读取项目时,您可能不必担心转义管道,但通常我必须创建阵列:)