我想将以破折号(-或--)开头的命令行选项传递给我正在使用以下标志运行的 Perl 程序-e:
$ perl -E 'say @ARGV' -foo
Unrecognized switch: -foo (-h will show valid options).
Run Code Online (Sandbox Code Playgroud)
传递不以-明显工作开头的参数:
$ perl -E 'say @ARGV' foo
foo
Run Code Online (Sandbox Code Playgroud)
我如何正确转义这些以便程序正确读取它们?
我尝试了很多变体,例如\-foo,,,,。尽管有些会产生不同的消息,但这些都不起作用。实际运行并输出.\\-foo'-foo''\-foo''\\-foo'\\-foo\-foo
您可以使用-s,例如:
perl -se 'print "got $some\n"' -- -some=SOME
Run Code Online (Sandbox Code Playgroud)
以上打印:
got SOME
Run Code Online (Sandbox Code Playgroud)
来自perlrun:
-s 启用命令行上程序名之后但任何文件名参数之前(或 -- 参数之前)的开关的基本开关解析。在那里找到的任何开关都会从 @ARGV 中删除,并在 Perl 程序中设置相应的变量。如果使用 -xyz 开关调用以下程序,则打印“1”;如果使用 -xyz=abc 调用该程序,则打印“abc”。
Run Code Online (Sandbox Code Playgroud)#!/usr/bin/perl -s if ($xyz) { print "$xyz\n" } Do note that a switch like --help creates the variable "${-help}", which is not compliant with "use strict "refs"". Also, when using this option on a script with warnings enabled you may get a lot of spurious "used only once" warnings.
对于简单的参数传递,请使用--,例如:
perl -E 'say "@ARGV"' -- -some -xxx -ddd
Run Code Online (Sandbox Code Playgroud)
印刷
-some -xxx -ddd
Run Code Online (Sandbox Code Playgroud)