我想从perl one liner打印昨天的日期,当我在命令提示符下运行时,我得到以下错误。
perl -e 'use POSIX qw(strftime);
$now_string = strftime "%Y%m%d", localtime(time()-86400);
print $now_string';
错误:
Can't find string terminator "'" anywhere before EOF at -e line 1.
我的perl版本v5.14.2
答案 0 :(得分:9)
不幸的是,在Windows命令行中,您必须使用双引号:
perl -e "..."
如果您运行的命令需要在内部引用,请使用''
或qq{}
。
perl -e "print qq{Hello Windows\n}"
答案 1 :(得分:1)
两个问题:
单引号('
)对Windows命令shell没有意义。使用双引号("
)引用参数。
如果您想要双引号字符串文字(例如"\n"
)在参数中需要双引号,则可以使用qq{...}
代替(qq{\n}
)。
您的代码并不总是返回昨天的日期。因为有些日子超过86400秒,您可以获得前天的日期。因为有些日子不到86400秒,你可以得到今天的日期。你想要:
perl -MDateTime -E"say
DateTime->now(time_zone=>'local')->set_time_zone('floating')
->subtract(days=>1)->strftime('%Y%m%d')"
但是,你必须将它全部放在一行上,因为Windows命令shell不支持其参数中的换行符。