Saída de piping de um comando para uma variável ..
Um exemplo simples parecido com o seu
$ a=$(echo abc | grep -o a)
$ echo $a
a
Então, no seu caso
$ line=asdf.fr
$ a=$(echo $line | grep -Po '.*(?=.fr)')
$ echo $a
asdf
$
Sua linha falhou porque expandiu a linha $ line da variável e a executou, o que grava um erro em stderr e nada em stdout. Todos os $ com significados diferentes são um pouco engraçados. Mas se você fez (no prompt de $) $$line<ENTER>
Então você começa o comando não encontrado. E se você fizer $$line>a
cat a
, então você não vê nada lá. Então, não está nada para fazer e não encontrar nada. Então, você precisa repetir a variável de linha, em vez de executá-la como se fosse um comando.