"\n"
の余分なエスケープを使わずにこれを実行すると、hexdump
は埋め込み改行の0a
を表示しません。 "\n"
にはなぜ追加治療が必要なのですか? (私はエスケープを行うString::ShellQuoteを見つけた答えを探しながら。)Perlから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'は、シェルエスケープされていない限り、改行文字を受け取らないhexdumpに行送ります。 –