returned=$?
não armazena STDOUT para returned
. Ele armazena o código de saída do último comando executado, ou seja, ./myexec "$file"
.
Assumindo que ./tests/"$file".output
tenha o resultado esperado, o que você quer dizer é por exemplo:
# first assign the value properly using the command substitution
return=$(./myexec $file)
# Then compare using process substitution, as diff demands a file to compare.
## And the process substitution passes diff the file descriptor of its STDOUT.
compared="$(diff <(echo "$returned") ./tests/"$file".output)"