Команда подстановки sed ведет себя странно

$(echo a)— это «замена команды». $(...)будет заменен выводом команды в . Вывод в этом случае — a, который затем пытается выполнить оболочка. Оболочка не может найти команду с именем a, и вы получаете сообщение об ошибке.

Неясно, каковы были ваши намерения и чего вы ожидали. Крайне необычно желание выполнить результат подстановки команд.


Некоторые программы выводят строки, которые должны быть обработаны оболочкой. Поэтому можно увидеть такой код, как

eval "$(ssh-agent)"

который оценивает (запускает )вывод данной команды. Эти команды имеют строго определенный вывод и обычно считаются безопасными для запуска таким образом. В приведенном выше примере ssh-agentзапустит процесс агента SSH и выведет несколько команд, которые установят соответствующие переменные среды, которые позже понадобятся клиенту sshдля использования агента, например,

SSH_AUTH_SOCK=/tmp/ssh-Ppg1EO5eRIZp/agent.6017; export SSH_AUTH_SOCK;
SSH_AGENT_PID=6018; export SSH_AGENT_PID;
echo Agent pid 6018;

Это затем оценивается с помощью eval.

Здесь используется

eval, а не просто $(ssh-agent), так как вывод команды ssh-agentявляется более составной командой. Без evalтерминаторы команд ;были бы особыми.

Пример:

$ s='echo hello; echo world'
$ $s
hello; echo world
$ eval "$s"
hello
world
1
22.02.2020, 13:56
1 ответ

Ваш исходный файл CSV представляет собой текстовый файл DOS. Текстовые файлы DOS имеют символ возврата каретки в самом конце каждой строки. Когда в системе Unix выводится символ возврата каретки, позиция курсора перемещается в начало строки, и любой дальнейший вывод будет напечатан поверх того, что уже есть.

В вашем случае третья группа захвата содержит символ возврата каретки после 0в данных вашего примера. Поскольку \3представляет собой 0\r(\r, представляющий символ возврата каретки ), вы выводите 0\r,в конце строки. Это выводит 0, перемещает курсор в начало строки и выводит запятую.

Преобразование входного файла в текстовый файл Unix.Это проще всего сделать с помощью такой утилиты, как dos2unix.

2
28.04.2021, 23:22

Теги

Похожие вопросы