Muszę przejść od ciągu do tablicy, w której każdy wpis to każde słowo w tym ciągu. Na przykład, zaczynając od:
VotePedro="Vote for Pedro"
Potrzebuję tablicy:
Vote
For
Pedro
Które powinienem być w stanie powtórzyć jako:
for i in "${votePedroArray[@]}"
do
## Do something
done
bash
shell-script
string
array
farid99
źródło
źródło
votePedroArray=("Vote" "For" "Pedro")
daje tablicę o długości 3. I${VotePedro}
jest taka sama jak$VotePedro
w tym kontekście. Aby uzyskać dostęp do poszczególnych elementów tablicy, możesz użyć nawiasów podobnych do tego, co miałeś dla pętli for w swoim pytaniu. np.${votePedroArray[0]}
jest pierwszym elementem w tablicy („Głosuj” w tym przykładzie)W przypadku pozostawienia cudzysłowu zmiennej, np.
$VotePedro
Wykonywane są następujące kroki:IFS
zmiennej; domyślnie jest to spacja, tabulator i nowa linia.W ten sposób możesz podzielić ciąg znaków na elementy rozdzielane spacjami (zakładając wartość domyślną
IFS
), wyłączając interpretację symboli wieloznacznych i rozwijając zmienną, której wartością jest ten ciąg poza cudzysłowami.Możesz bezpośrednio dokonać podziału w miejscu użycia; działałoby to nawet w powłokach takich jak sh, które nie mają tablic:
źródło
Oprócz zepsucia
$IFS
możesz też po prostu zepsuć to, co chcesz:... co pozwoliłoby nawet na oddzielenie pustych pól pustymi spacjami.
źródło