Mam skrypt Perla, który daje mi zdefiniowaną listę losowych liczb odpowiadających wierszom pliku. Następnie chcę wyodrębnić te wiersze z pliku za pomocą sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
Zmienna var
zwraca wyjście jak: cat last_queries.txt | sed -n '12p;500p;700p'
. Problem w tym, że nie mogę uruchomić tego ostatniego polecenia. Próbowałem $var
, ale wynik nie jest poprawny (jeśli uruchomię ręcznie polecenie, działa dobrze, więc nie ma problemu). Jaki jest właściwy sposób, aby to zrobić?
PS: Jasne, że mógłbym wykonać całą pracę w Perlu, ale staram się uczyć w ten sposób, ponieważ może mi to pomóc w innych sytuacjach.
$($cmd))
nie udało. Zawsze mówi, że polecenie nie zostało znalezione. Dzięki!po prostu z plikiem.
W tym przykładzie użyłem pliku / etc / password, używając specjalnej zmiennej
${RANDOM}
(o której się tutaj dowiedziałem) ised
wyrażenia, które miałeś, jedyną różnicą jest to, że używam podwójnych cudzysłowów zamiast pojedynczych, aby umożliwić rozwinięcie zmiennej.źródło
W przypadku, gdy masz wiele zmiennych zawierających argumenty dla polecenia używasz, a nie tylko jeden ciąg, należy nie używać eval bezpośrednio, ponieważ nie będą mogły w następującym przypadku:
Wynik:
Zauważ, że nawet jeśli „Some arg” został przekazany jako pojedynczy argument, należy
eval
go odczytać jako dwa.Zamiast tego możesz po prostu użyć ciągu jako samego polecenia:
Zauważ różnicę między wyjściem
eval
a nowąeval_command
funkcję:Wynik:
źródło
eval 'echo_arguments arg1 arg2 "Some arg"'
. Wtedy wynik będzie taki jak w drugim przykładzie.