簡體   English   中英

如何用定界符在2D數組中插入單詞? 使用BASH腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM