Возможно, вы захотите взглянуть на ловушку DEBUG
в bash. Изman builtins
:
If a sigspec is DEBUG, the command arg is executed before every simple command,
for command, case command, select command, every arithmetic for command, and
before the first command executes in a shell function (see SHELL GRAMMAR
above). Refer to the description of the extdebug option to the shopt builtin
for details of its effect on the DEBUG trap. If a sigspec is RETURN, the com‐
mand arg is executed each time a shell function or a script executed with the.
or source builtins finishes executing.
Таким образом, вы можете настроить функцию отладки следующим образом. Поскольку он запускается перед командами, вы можете использовать его для добавления к вашему выводу.
#!/bin/bash
debug() {
: # echo or other commands here
}
trap debug DEBUG
# Commands here
Я читал, что MacOS X хранит такие символы, как ö
, как составные/комбинирующие символы. Это как два символа :o
, за которыми следует объединение "
. Вероятно, это не относится к уровню Unix.
Я могу воспроизвести на Debian Gnu/Linux:echo Åström | sed 's/[^[:alnum:]]//g'
--перейти кhttps://en.wikipedia.org/wiki/Precomposed_character#Comparing_precomposed_and_decomposed_charactersи вставить две альтернативные версии Åström
. Тот, кто использует комбинированные символы, опускает акценты.
Создается впечатление, что sed
видит объединяющиеся символы так, как если бы они были просто не -буквенными -цифровыми символами.
В качестве временного решения передайте имена файлов через
iconv -f utf-8-mac -t utf-8
od
Выполнено в Debian Gnu/Linux с использованием терминала Konsole и оболочки bash, рабочего стола Plasma -и вставлено из браузера Chrome.
#↳ echo Åström composing | od -tax1
0000000 A L nl s t r o L bs m sp c o m p o
41 cc 8a 73 74 72 6f cc 88 6d 20 63 6f 6d 70 6f
0000020 s i n g nl
73 69 6e 67 0a
0000025
#↳ echo Åström composed | od -tax1
0000000 C enq s t r C 6 m sp c o m p o s e
c3 85 73 74 72 c3 b6 6d 20 63 6f 6d 70 6f 73 65
0000020 d nl
64 0a
0000022
Вероятно, это вина sed
.
Однако я не могу воспроизвести ваши результаты на macOS 10.13.6, где ö
всегда преобразуется в обычный o
, и это происходит как с /usr/bin/sed
, так и с GNU Sed.
На более новой машине FreeBSD ö
сохраняется во всех случаях, если локаль заканчивается на .UTF-8
. Кажется, я припоминаю, что в первоначальных попытках FreeBSD интернационализировать Sed были ошибки. macOS обычно использует более старые версии кода BSD и, вероятно, не использует последние исправления.
В NetBSD с более традиционной BSD sed
ö
удаляется, как будто это не буквенно-цифровой символ.