Мне нужно перейти от строки к массиву, где каждая запись является каждое слово в этой строке. Например, начиная с:
VotePedro="Vote for Pedro"
Мне нужен массив:
Vote
For
Pedro
Который я тогда должен быть в состоянии повторить как:
for i in "${votePedroArray[@]}"
do
## Do something
done
bash
shell-script
string
array
farid99
источник
источник
votePedroArray=("Vote" "For" "Pedro")
, даст вам массив длины 3. И${VotePedro}
такой же, как$VotePedro
в этом контексте. Чтобы получить доступ к отдельным элементам массива, вы можете использовать скобки, аналогичные тем, которые использовались для цикла for в вашем вопросе. Например,${votePedroArray[0]}
первый элемент в массиве (в данном примере «Проголосовать»)Когда вы оставляете расширение переменной без кавычек, например
$VotePedro
, выполняются следующие шаги:IFS
переменной; по умолчанию это пробел, табуляция и перевод строки.Таким образом, вы можете разбить строку на элементы, разделенные пробелами (принимая значение по умолчанию
IFS
), отключив расширение по шаблону и развернув переменную, значение которой является этой строкой, вне кавычек.Вы можете напрямую сделать разделение в точке использования; это будет работать даже в таких оболочках, как sh, у которых нет массивов:
источник
Помимо взлома
$IFS
, вы также можете просто разбить его на что угодно:... который позволял бы даже разделенные пробелами пустые поля.
источник