小编Ros*_*son的帖子

在Windows命令提示符中转义双引号副作用

我遇到了Windows命令解释器的一个非常奇怪的问题.它出现在XP和Windows 7上.我的描述适用于Perl脚本,但是这个问题适用于在命令行上运行任何类型的程序,它接受命令行参数.

对于测试我使用的是Perl脚本check-params.pl,它只是输出它所看到的参数 -

use strict;
use warnings;
while (my $param = shift @ARGV) {
    print "Param: [$param]\n";
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我跑 -

perl check-params.pl "a b|<>" c^|^<^>cc
Run Code Online (Sandbox Code Playgroud)

然后输出是

[Param: a b|<>]
[Param: c|<>cc]
Run Code Online (Sandbox Code Playgroud)

正如所料.特殊的字符| <>在双引号内工作正常,但在外部引号时,你用^来转义它们.

但是,当引用的参数添加双引号时,例如

perl check-params.pl "a\" b|<>"
Run Code Online (Sandbox Code Playgroud)

然后我得到错误 -

> was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

但如果双引号出现特殊字符|之后 <或>,然后它工作正常.

你可以通过转义特殊的|来轻松解决这个问题 <> char,带引号参数内的^.例如

perl check-params.pl "a\" b^|"
Run Code Online (Sandbox Code Playgroud)

但是,转义的双引号不仅影响特殊字符| 当前参数中的<> 但它会影响任何后续参数中的这些特殊字符.

例如,如果我这样做 -

perl check-params.pl "aa \"bb" ccc | perl check-pipe.pl
Run Code Online (Sandbox Code Playgroud)

(check-pipe.pl只需输出管道收到的东西 -

use strict; …
Run Code Online (Sandbox Code Playgroud)

windows escaping command-prompt

7
推荐指数
1
解决办法
4348
查看次数

标签 统计

command-prompt ×1

escaping ×1

windows ×1