Відповіді:
Передача виводу команди на змінну ..
Простий приклад, трохи схожий на ваш
$ a=$(echo abc | grep -o a)
$ echo $a
a
Так у вашому випадку
$ line=asdf.fr
$ a=$(echo $line | grep -Po '.*(?=.fr)')
$ echo $a
asdf
$
Ваша лінія не вдалася, оскільки вона розширила змінну рядка $ line та виконала її, яка записує помилку на stderr і нічого не буде stdout. Всі $ з різними значеннями виглядають трохи смішно. Але якщо ви це зробили (за запитом $), $$line<ENTER>
тоді ви отримаєте команду не знайдено. А якщо ви це зробите, $$line>a
cat a
то нічого там не бачите. Тож труби нічого не гребують і нічого не знаходять. Отже, вам потрібно повторювати змінну рядка, а не запускати її так, як це команда.
$line
де його містити,rm -rf /
то із задоволенням руйнуйте вашу систему. Ніколи не виконуйте змінних, за винятком випадків, якщо вони містять лише ваш вміст, а не введення користувача / файлу.