Saya memiliki skrip Perl yang memberi saya daftar angka acak yang ditentukan yang sesuai dengan baris file. Selanjutnya saya ingin mengekstrak baris-baris itu dari file menggunakan sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
Variabel var
mengembalikan sebuah output seperti: cat last_queries.txt | sed -n '12p;500p;700p'
. Masalahnya adalah saya tidak bisa menjalankan perintah terakhir ini. Saya mencoba $var
, tetapi hasilnya tidak benar (jika saya menjalankan secara manual perintah itu berfungsi dengan baik, jadi tidak ada masalah di sana). Apa cara yang benar untuk melakukan ini?
PS: Tentu saya bisa melakukan semua pekerjaan di Perl, tetapi saya mencoba belajar dengan cara ini, karena bisa membantu saya dalam situasi lain.
$($cmd))
gagal. Itu selalu mengatakan perintah tidak ditemukan. Terima kasih!hanya dengan file Anda saja.
Dalam contoh ini saya menggunakan file / etc / password, menggunakan variabel khusus
${RANDOM}
(yang saya pelajari di sini), dansed
ekspresi yang Anda miliki, satu-satunya perbedaan adalah bahwa saya menggunakan tanda kutip ganda dan bukan tunggal untuk memungkinkan ekspansi variabel.sumber
Dalam kasus di mana Anda memiliki banyak variabel yang berisi argumen untuk perintah yang Anda jalankan, dan bukan hanya satu string, Anda tidak boleh menggunakan eval secara langsung, karena akan gagal dalam kasus berikut:
Hasil:
Perhatikan bahwa meskipun "Some arg" diajukan sebagai satu argumen,
eval
bacalah sebagai dua.Sebagai gantinya, Anda bisa menggunakan string sebagai perintah itu sendiri:
Perhatikan perbedaan antara output
eval
daneval_command
fungsi baru :Hasil:
sumber
eval 'echo_arguments arg1 arg2 "Some arg"'
. Maka hasilnya akan seperti pada contoh kedua Anda.