Primeiro, o erro de [
é porque answer
está vazio, portanto, [
vê três argumentos: =
, y
e ]
. Sempre coloque aspas duplas em torno das substituições de variáveis: if [ "$answer" = "y" ]
.
O motivo $answer
está vazio fd 0 está ocupado com a entrada do arquivo devido ao redirecionamento <tester
durante o loop while.
while IFS= read -r line <&3
do
read -n 1 -p "Print line? [y/n] " answer
if test "$answer" = "y"
then
echo "$line"
fi
done 3< tester