Вы используете $'...'
, когда хотите, чтобы оболочка интерпретировала экранирующие последовательности.
$ echo 'a\nb'
a\nb
$ echo $'a\nb'
a
b
В perl
, опция -e
получает строку. Если вы используете $'...'
, то экранирующие последовательности в строке интерпретируются перед переходом к perl
. В вашем случае \r
прошла и никогда не проходила до perl
.
With $'...'
:
$ perl -MO=Deparse -we $'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}'
BEGIN { $^W = 1; }
binmode STDIN;
undef $/;
$_ = <ARGV>;
if (/ab\ncd/) {
print 'test';
}
-e syntax OK
Without it:
$ perl -MO=Deparse -we 'binmode STDIN;undef $/;$_ = <>;if(/ab\r\ncd/){print "test"}'
BEGIN { $^W = 1; }
binmode STDIN;
undef $/;
$_ = <ARGV>;
if (/ab\r\ncd/) {
print 'test';
}
-e syntax OK
для тривиального примера, перечисленного выше,
ls -a $(cat lsoptions.txt)