Если вы не преобразуете новую строку в два символа \n
, вы выполняете команду
echo -e \
| hexdump -C
К sh
, что эквивалентно
echo -e | hexdump -C
Когда вы переводите новую строку в два символа \n
, вы выполняете команду
echo -e \\n | hexdump -C
, который передает два символа \n
в echo
, для которых выводит символ новой строки в -e
.
Вам не нужно использовать -e
и создавать побеги для -e
. Вы можете создать правильную команду оболочки. Эта команда будет:
echo '
' | hexdump -C
Вы можете сделать это несколькими способами. Вы можете развернуть свое собственное решение.
(my $sh_literal = $string) =~ s/'/'\\''/g;
$sh_literal = "'$sh_literal'";
system( "echo $sh_literal | hexdump -C" );
Существует String :: ShellQuote .
use String::ShellQuote qw( shell_quote );
my $sh_literal = shell_quote($string);
system( "echo $sh_literal | hexdump -C" );
Наконец, вы можете полностью избежать оболочки.
open(my $fh, "|-", "hexdump", "-vC")
or die("Could not start hexdump: $!\n");
print($fh $string);