Bash

在 Bash 中從字元串到“單詞”數組

  • May 29, 2020

我需要從一個字元串轉到一個數組,其中每個條目都是該字元串上的每個單詞。例如,從以下開始:

VotePedro="Vote for Pedro"

我需要數組:

Vote
For
Pedro

然後我應該能夠迭代為:

for i in "${votePedroArray[@]}"
   do
   ## Do something
   done
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})

解釋:

數組通常使用括號聲明。例如votePedroArray=("Vote" "For" "Pedro")會給你一個長度為 3 的數組。${VotePedro}在這種情況下,它與 $VotePedro 相同。要訪問單個數組元素,您可以使用類似於問題中 for 循環的括號。eg${votePedroArray[0]}是數組中的第一個元素(本例中的“投票”)

bash和大多數其他類似 Bourne 的 shell 中,當您不引用變數擴展時,例如$VotePedro,執行以下步驟:

  1. 查找變數的值。
  2. 將每個空白塊的值拆分為字元串列表。更一般地,分隔符是IFS變數值中的字元;預設情況下是空格、製表符和換行符。
  3. 將列表的每個元素解釋為萬用字元模式;對於每個元素,如果模式與某些文件匹配,則將該元素替換為匹配的文件名列表。

IFS因此,您可以通過關閉萬用字元擴展並擴展其值為引號之外的字元串的變數,將字元串拆分為以空格分隔的元素(假設預設值為)。

VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do …

您可以直接在使用點進行拆分;這甚至可以在沒有數組的 shell 中工作:

VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
 set +f
 …
done
set +f

引用自:https://unix.stackexchange.com/questions/214664