«Необработанный вывод» вашего начального echo
будет содержать фактические Escape-символы (ASCII-код 27, восьмеричный 033 )вместо \e
. Остальная часть строки остается как есть. Это опция -e
для echo
в bash
, которая заменяет последовательности символов \e
символами Escape (, точно так же, как заменяет \t
табуляцией и т. д.)
Чтобы включить Escape-символ непосредственно в $foo
, не проходя через echo -e
, вам нужно ввести в строку буквальный Escape-символ.
В bash
вы можете ввести буквальный символ Escape, нажав Ctrl+V , а затем Esc .
В терминалеэто будет выглядеть так
foo="^[[32mFOO^[[0m"
, где каждый ^[
создается с помощью Ctrl+V , за которым следует Esc .
Или вы можете использовать$'...'
("Интерполяцию строки C" вbash
)для расширения\e
:
foo=$'\e[32mFOO\e[0m'
У меня есть частичный ответ: моя теория модулей ядра верна. Я сравнил вывод lsmod
до и после трюка с подключением/отключением флэш-накопителя, и он был очень четким :
$ diff lsmod.txt lsmod.txt2
36c36
< usb_storage 77824 1 uas
---
> usb_storage 77824 4 uas
После репликации этого состояния через:
$ sudo modprobe usb_storage
Я могу получить полную скорость на диске без каких-либо других ухищрений.
Я по-прежнему приветствую другие ответы, которые могут предоставить более подробную информацию.