Использовать сопоставление регулярных выражений bash и получить доступ к встроенному массиву BASH _REMATCH
s="hello world 15 42"
re='.*([0-9]+) ([0-9-]+)'
if [[ $s =~ $re ]]; then
for key in "${!BASH_REMATCH[@]}"; do
printf "%s\t%s\n" "$key" "${BASH_REMATCH[$key]}"
done
fi
0 hello world 15 42
1 5
2 42
Решение найдено:
f()(echo $(history 2 | head -n1 | cut -d' ' -f2-))
или используя fc
, как предложил Г. -Ман:
f()(fc -ln -1)
испытание:
$ echo 123*
123*
$ f
echo 123*