У меня есть программа, которая печатает что-то, что содержит нулевые байты \0
и специальные символы, такие как \x1f
и символы новой строки. Например:
someprogram
#!/bin/bash
printf "ALICE\0BOB\x1fCHARLIE\n"
Учитывая такую программу, я хочу прочитать ее вывод таким образом, чтобы все эти специальные символы были захвачены в переменной оболочки output
, Так что, если я запущу:
echo $output
, потому что я не даю -e
, я бы хотел, чтобы результат был:
ALICE\0BOB\x1fCHARLIE\n
Как этого достичь?
Моя первая попытка была:
output=$(someprogram)
Но я получил этот отраженный вывод, который не имеет специальных символов:
./myscript.sh: line 2: warning: command substitution: ignored null byte in input
ALICEBOBCHARLIE
Я также пытался использовать read
следующим образом:
output=""
while read -r
do
output="$output$REPLY"
done < <(someprogram)
Затем я избавился от предупреждения, но в выводе все еще отсутствуют все специальные символы:
ALICEBOBCHARLIE
Так как я могу захватить вывод someprogram
таким образом, чтобы у меня были все специальные символы в моей результирующей строке?
РЕДАКТИРОВАТЬ: Обратите внимание, что такие строки можно иметь в bash:
$ x="ALICE\0BOB\x1fCHARLIE\n"
$ echo $x
ALICE\0BOB\x1fCHARLIE\n
Так что Это не проблема.
РЕДАКТИРОВАТЬ 2: Я переформулирую вопрос немного теперь, когда я получил принятый ответ, и я понял вещи немного лучше. Итак, мне просто нужно было сохранить выходные данные someprogram
в некоторой переменной оболочки таким образом, чтобы я мог распечатать его на стандартный вывод без каких-либо изменений каких-либо специальных символов, как если бы someprogram
был просто передан напрямую на стандартный вывод.