У меня есть сценарий Perl, который дает мне определенный список случайных чисел, которые соответствуют строкам файла. Далее я хочу извлечь эти строки из файла, используя sed
.
#!/bin/bash
count=$(cat last_queries.txt | wc -l)
var=$(perl test.pl test2 $count)
Переменная var
возвращает вывод , как: cat last_queries.txt | sed -n '12p;500p;700p'
. Проблема в том, что я не могу запустить эту последнюю команду. Я пытался с $var
, но вывод не является правильным (если я запускаю команду вручную, она работает нормально, так что никаких проблем нет). Как правильно это сделать?
PS: Конечно, я мог бы делать всю работу в Perl, но я пытаюсь научиться этому, потому что это может помочь мне в других ситуациях.
$($cmd))
не удалось. Это всегда говорит, что команда не найдена. Спасибо!просто с вашим файлом вместо.
В этом примере я использовал файл / etc / password, используя специальную переменную
${RANDOM}
(о которой я узнал здесь), иsed
выражение, которое у вас было, единственное отличие состоит в том, что я использую двойные кавычки вместо одинарных, чтобы разрешить расширение переменной.источник
В случае, когда у вас есть несколько переменных, содержащих аргументы для команды, которую вы запускаете, а не просто одну строку, вы не должны использовать eval напрямую, так как это не получится в следующем случае:
Результат:
Обратите внимание, что даже если «Some arg» был передан как один аргумент,
eval
считайте его как два.Вместо этого вы можете просто использовать строку в качестве самой команды:
Обратите внимание на разницу между выводом
eval
и новойeval_command
функцией:Результат:
источник
eval 'echo_arguments arg1 arg2 "Some arg"'
. Тогда результат будет таким же, как во втором примере.