Я бы, вероятно, использовал один из вариантов, уже предоставленных @slhck, но вот еще несколько способов сделать это:
Используя массивы, как на любом другом языке:
$ foo=( $(SayStuff) )
$ echo ${foo[2]}
cucumbers
var=()Объявляет массив, $(command)сохраняет вывод команды. Таким образом, foo=( $(SayStuff) )сохраняет вывод SayStuffв массив fooи yuou, тогда echoэто третий элемент с ${foo[2]}.
sed
$ SayStuff | sed 's/.* \(.*\)/\1/'
cucumbers
Команда sedподставит ( s///) все с последним словом. Регулярное выражение сопоставляет что угодно, вплоть до пробела ( .*), которое будет соответствовать всему, вплоть до последнего пробела, а затем захватывает последнее слово (\(.*\). Поскольку слово было захвачено, мы можем ссылаться на него как \1.
Более простая версия:
$ SayStuff | sed 's/.* //'
cucumbers
удар
$ foo=$(SayStuff); echo ${foo##* }
cucumbers
При этом используются возможности манипуляции со строками в bash, подробности см. Здесь .
Больше Баш
$ SayStuff | while read a b c; do echo $c; done
cucumbers
Perl, где, конечно, есть много способов сделать это:
$ SayStuff | perl -lane 'print $F[$#F]'
cucumber
В -aмарке perlведет себя как awk, расщепление линии на пробельном и сохранении в массив @F. Затем мы печатаем последний элемент @F( $#Fэто количество элементов в @F). -lГоворит Perl , чтобы добавить новую строку в каждом printзаявлении, -nчто он должен обрабатывать STDIN построчно и -eчто он должен запустить скрипт заданный в командной строке.
$ SayStuff | perl -pe 's/.* //'
cucumber
Опции были объяснены выше, мы просто удаляем все до последнего пробела и печатаем ( -p).
$ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
cucumbers
Здесь мы передаем в Watermelons and cucumbersкачестве аргументов, которые Perl будет сохранять в @ARGмассиве, и поэтому мы печатаем последний элемент @ARG.
обман. Этот используется sedдля преобразования пробелов в новые строки, а затем tailдля печати только последней строки.
$ SayStuff | sed 's/ /\n/g' | tail -n 1
cucumbers
grep и регулярные выражения, с помощью -oкоторых печатается только совпадающая строка.
$ SayStuff | grep -Po '\w+$'
cucumbers
мошенничество
$ SayStuff | grep -o cucumbers
cucumbers
cutне будет обрабатывать переменное количество пробелов, аawkделать.