[英]How to insert words in 2D array with delimiters? Using BASH script
在我的文本文件中,我有:
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)
如前所述,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" )'
因此,我們創建了一個名稱為“ array”的關聯數組,可以使用以下格式:
echo "${array[1,0]}"
#Output
b
您可以使用經典double for循環或更簡單的方法遍歷數組的所有鍵
for key in "${!array[@]}";do
echo "$key - ${array[$key]}"
done
0,0 - a
0,1 - c
1,0 - b
1,1 - d
不完全是,但是您知道了:
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]
當您從文件中讀取項目時,您可能不必擔心轉義管道,但是通常情況下我必須創建數組:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.