Folgendes passiert:
var2=$("$var1" | (grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b'))
^^^^^^^ Execute the program named (what is in variable var1).
Sie müssen etwa so vorgehen:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
oder sogar
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
Ich denke, das ist ein zu komplizierter Weg, aber wenn Sie Ihr Skript einfach zum Laufen bringen wollen, versuchen Sie Folgendes:
#!/bin/bash
file="email.txt"
var1=$(awk 'NR==2' $file)
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
echo $var2
Ich bin mir nicht sicher, was file=$(myscript) ist sollte es tun, aber in der nächsten Zeile möchten Sie einen Dateinamen als Argument für awk , also sollten Sie einfach email.txt zuweisen als Stringwert zu file , keinen Befehl namens myscript ausführen . $var1 ist kein Befehl (es ist nur eine Zeile aus Ihrer Textdatei), also müssen Sie echo es um grep zu geben alles, was nützlich ist, um damit zu arbeiten. Die zusätzlichen Klammern um grep sind überflüssig.