s='foo bar baz'
a=( $s )
echo ${a[0]}
echo ${a[1]}
...
Это зависит от того, что вы имеете в виду под сплит . Если вы хотите провести итерацию по словам в строке, которая находится в переменной, вы можете просто провести итерацию. Например, скажем, переменная строка
- это строка
. Тогда можно сделать так:
for word in $line; do echo $word; done
Это выведет:
this
is
a
line
для ... в $var
разбивает $var
, используя значения в $IFS
, значение по умолчанию которого означает "разделить пробелы и новые строки".
Если вы хотите читать строки пользователя или файла, вы можете сделать что-нибудь вроде:
cat $filename | while read line
do
echo "Processing new line" >/dev/tty
for word in $line
do
echo $word
done
done
Для чего-нибудь еще, вам нужно быть более откровенным и определить ваш вопрос более подробно.
Примечание: Редактировано для удаления башизма, но я все еще сохранил cat $filename | ...
, потому что он мне нравится больше, чем перенаправление.
Если у вас уже есть строка текста в переменной $LINE, то вы должны быть в состоянии сказать
for L in $LINE; do
echo $L;
done
$ line="these are words"
$ ll=($line)
$ declare -p ll # dump the array
declare -a ll='([0]="these" [1]="are" [2]="words")'
$ for w in ${ll[@]}; do echo $w; done
these
are
words
Вариант -a
считывание позволит разделить строку, считываемую символами, содержащимися в $IFS
.
сделайте это
while read -r line
do
set -- $line
echo "$1 $2"
done <"file"
$1, $2 и т.д. будут вашими 1-ым и 2-ым разделенными "полями". используйте $@, чтобы получить все значения... используйте $#, чтобы получить длину "полей".