Apa yang terjadi adalah ini:
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).
Anda perlu melakukan sesuatu seperti ini:
var2=$(echo "$var1" | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
atau bahkan
var2=$(awk 'NR==2' $file | grep -Eio '\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b')
Saya pikir ini adalah cara yang terlalu rumit untuk melakukan berbagai hal, tetapi jika Anda hanya ingin skrip Anda berfungsi, coba ini:
#!/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
Saya tidak yakin apa file=$(myscript)
seharusnya dilakukan, tetapi pada baris berikutnya Anda menginginkan nama file sebagai argumen untuk awk
, jadi Anda hanya perlu menetapkan email.txt
sebagai nilai string ke file
, bukan menjalankan perintah yang disebut myscript
. $var1
bukan perintah (itu hanya satu baris dari file teks Anda), jadi Anda harus echo
untuk memberikan grep
sesuatu yang berguna untuk dikerjakan. Tanda kurung tambahan di sekitar grep
berlebihan.