В чистом bash, поэтому без необходимости в подпроцессе и работы с многострочным вводом, подобным решению awk, но не работает, если много слов между словами в начале / конце строки: - (:
function revert_line_in() {
test $# -eq 0 && return
test $# -eq 1 && echo -n "$1"
test $# -eq 1 || { local word=$1; shift; revert_line_in $@; echo -n " $word"; }
}
function revert_line() {
while read line; do revert_line_in $line; echo; done
}
echo -e " AAaa BBbb CCcc\nthis is another test example" | revert_line
revert_line <<< "AAaa BBbb CCcc
this is another test example"
revert_line < file
Обратите внимание на ключевое слово local
в функции, которая объявляет локальную переменную. Если опущено, решение ломается.