Quello che sta succedendo è questo:
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-]example@unixlinux.online[A-Z0-9.-]+\.[A-Z]{2,4}\b'))
^^^^^^^ Execute the program named (what is in variable var1).
Devi fare qualcosa del genere:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-]example@unixlinux.online[A-Z0-9.-]+\.[A-Z]{2,4}\b')
o anche
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-]example@unixlinux.online[A-Z0-9.-]+\.[A-Z]{2,4}\b')
Penso che questo sia un modo eccessivamente complicato di affrontare le cose, ma se vuoi solo far funzionare il tuo script, prova questo:
#!/bin/bash
file="email.txt"
var1=$(awk 'NR==2' $file)
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-]example@unixlinux.online[A-Z0-9.-]+\.[A-Z]{2,4}\b')
echo $var2
Non sono sicuro di cosa sia file=$(myscript) avrebbe dovuto fare, ma nella riga successiva vuoi un nome di file come argomento per awk , quindi dovresti semplicemente assegnare email.txt come valore stringa a file , non eseguire un comando chiamato myscript . $var1 non è un comando (è solo una riga del tuo file di testo), quindi devi echo per dare grep qualsiasi cosa utile con cui lavorare. Le parentesi aggiuntive attorno a grep sono ridondanti.