Другая опция состояла бы в том, чтобы использовать fetchmail, чтобы вытянуть почту от Gmail и поместить его в локальный mbox файл.
Можно использовать что-то вроде этого для одной строки входа:
IFS="," read -ra arr <<< "$foo"
Демонстрация:
$ cat t.sh
foo="3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, ..." # snipped
IFS="," read -ra arr <<< "$foo"
echo ${#arr[@]}
echo ${arr[0]}
echo ${arr[30]}
$ ./t.sh
31
3
1280 720
Кредиты: строка Разделения на основе разделителя в ударе? ответ Johannes Schaub. Проверьте другие ответы там также.
Ваш первый отрывок - ничто как синтаксис оболочки. Это - корректный синтаксис Perl.
Ваш второй отрывок не использует cut
правильно; я не знаю то, что Вы предназначили.
Оболочка имеет встроенную строковую конструкцию разделения: когда Вы пишете $somevar
без любых кавычек оболочка сначала ищет значение переменной somevar
, затем разделения, которые оценивают в отдельные слова символами, указанными IFS
, и наконец интерпретирует каждое слово как шаблон шарика (подстановочный знак файла). Таким образом, можно разделить строку путем установки IFS
к символу разделителя и временно выключающий globbing.
set -f; IFS=,
arr=($stats)
set +f; unset IFS
Обратите внимание, что, если поле содержит пробел, элемент массива сохранит тот пробел. Если Вы хотите разделить во всем пробеле, а также запятых, установить IFS=', '
. Отметьте это IFS
строка не должна разделять в, но ряд символов для разделения в; или пространство или запятая составят разделитель. Кроме того, существуют специальные правила для пробела: любая последовательность нуля или большего количества пробелов, сопровождаемых запятой, сопровождаемой нулем или большим количеством пробелов, составит один разделитель, и любая последовательность одних или нескольких пробелов также составит разделитель.
Если Вы только хотите разделить пробел вначале или конец поля, необходимо будет сделать это поэлементно.
shopt -s extglob
for ((i=0; i<${#arr[@]}; i++)); do
arr[i]=${arr[i]#+( )} # strip one or more spaces at the beginning
arr[i]=${arr[i]%+( )} # strip one or more spaces at the end
done
$ set -f # turn off globbing, so as not to expand wildcards
$ arr=($(echo "$stats" | sed 's/,/ /g'))
$ echo ${arr[1]}
aac-lc