arecord -Обработчик N не работает -он начинает запись, даже если есть запущенный процесс

В обработке командной строки есть шаг, который называется шагом удаления кавычек . Обычно это последнее, что происходит перед выполнением команды, и оно удаляет внешние наборы кавычек, которые вы использовали для цитирования строк в команде.

Для такой команды, как

sed -e "s/a/b/g"

На этом шаге убедитесь, что команде sedв качестве последнего аргумента задана строка s/a/b/g, а не"s/a/b/g".

Когда вы читаете строку "s/a/b/g"из файла с помощью catв подстановке команды, кавычки не удаляются, так как они не являются частью исходной команды (они являются частью считываемых данных из файла ).

Это означает, что sedполучит буквальную строку "s/a/b/g"в качестве выражения для запуска, и поэтому он жалуется, что не понимает первоначальную"(команду sed, ожидавшую команду ).

Что касается результатов трассировки set -x, рассматривайте их как не более чем отладочные данные. Оболочка bashдобавит кавычки вокруг строк, содержащих определенные символы в трассировке, поэтому это не указывает на то, что на самом деле было заключено в кавычки любого отдельного аргумента или как оно было интерпретировано вызванной утилитой.


Кроме того, чтобы запустить sedсо сценарием редактирования в файле, используйте параметр -f:

sed -f noquotes.txt <<<"aaa"

Кроме того, команда yв sedможет использоваться для более эффективной транслитерации между одним набором одиночных символов в другой, чем замена с помощью s. Вашу замену s/a/b/gлучше записать как y/a/b/.

Если это единственная операция, которую вам нужно выполнить, то может быть даже эффективнее использовать более простую trутилиту:

tr a b <<<"aaa"
0
24.12.2020, 17:29
0 ответов

Теги

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