Когда я запускаю это без использования дополнительного выхода для "\n"
, hexdump
не печатает 0a
для встроенной строки новой строки. Зачем нужна дополнительная обработка "\n"
? (В поисках ответа я нашел String::ShellQuote, который делает вытекание.)Perl to Bash: Как выглядит символ « n» символа новой строки?
#!/usr/bin/env perl
use warnings;
use 5.012;
use utf8;
binmode STDOUT, ':utf8';
use charnames qw(:full);
use IPC::System::Simple qw(system);
for my $i (0x08 .. 0x0d) {
printf "0x%02x - %s\n", $i, '\N{' . charnames::viacode($i) . '}';
my $string = "It" . chr($i) . "s";
$string =~ s/\n/\\n/g;
system("echo -e \Q$string\E | hexdump -C");
say "";
}
Quotemeta избегает строк внутри perl. Команда 'echo' берет правильно напечатанную' \ n' и правильно интерпретирует ее как новую строку в bash. Вы передаете 'stdout' linewise в hexdump, который не получает символ новой строки, если он не экранирован. –