Bash не поддерживает нулевые байты в переменных. foo=$(cat file)
заставляет $foo
содержать начало файла, вплоть до первого нулевого байта. Замена команды также удаляет из файла все конечные новые строки. Например, если файл состоит из четырех байт (a
, новая строка, новая строка, новая строка), то foo
содержит только a
, как если бы файл содержал только этот один байт.
Если вы хотите сохранить конечные новые строки, сделайте так, чтобы команда выводила дополнительный символ без новой строки, а затем удалите его.
foo=$(cat file; echo a)
foo=${foo%a}
До сих пор все это работало во всех оболочках в стиле Bourne/POSIX (ash, ksh, bash, ...). Bash ≥4.0 имеет более быстрый способ чтения файла в переменную: mapfile
.
mapfile
Просто не существует способа запихнуть нулевой байт в переменную bash. Если вам это нужно, у вас есть несколько вариантов:
base64
и base64 -d
. Взгляните на /etc/iproute2/rt_tables
. eth1
— это имя таблицы, в данном случае (необычное ). Возможно, это таблица, которая отправляет все пакеты через eth1
. См.
ip route show table eth1