Не, нужна не функция. Вообще я понял, в чём проблема. Я пытался вызвать команду, сохранённую в переменную, а в команде было перенаправление вывода (>). Так bash не умеет, редиска. Нужно использовать eval. Вот так работает:
#!/bin/bash
COMMAND="cat > ggg"
eval $COMMAND
echo 'aaaa' | ./test.sh