sid*_*com 3 linux perl command-line sh quote
为什么第二个单行内容尽管有单引号?
perl -wE 'say('Hello')'
# Name "main::Hello" used only once: possible typo at -e line 1.
# say() on unopened filehandle Hello at -e line 1.
perl -wE 'say length('Hello')'
# 5
Run Code Online (Sandbox Code Playgroud)
在外壳命令,'abc'def,abc'def',abcdef和'abcdef'都是相等的,所以'...'Hello'...'是相同的'...Hello...'.
对于perl -wE 'say('Hello')'你的shell调用
exec("perl", "-wE", "say(Hello)")
Run Code Online (Sandbox Code Playgroud)
如果第一个参数say是一个裸字并且没有使用该名称声明子,则将该裸字用作文件句柄.
对于perl -wE 'say length('Hello')'你的shell调用
exec("perl", "-wE", "say length(Hello)")
Run Code Online (Sandbox Code Playgroud)
如果找到了一个裸字,那么该名称没有声明任何子句,则不期望文件句柄,下一个标记不是=>,并且use strict 'subs';不生效,裸字是一个返回自身的字符串文字.
解决方案:
perl -wE 'say("Hello")' # exec("perl", "-wE", "say(\"Hello\")")
perl -wE 'say(q{Hello})' # exec("perl", "-wE", "say(q{Hello})")
perl -wE 'say('\''Hello'\'')' # exec("perl", "-wE", "say('Hello')")
Run Code Online (Sandbox Code Playgroud)
请注意,perl不要求代码是单独的参数.
perl -wE'say("Hello")' # exec("perl", "-wEsay(\"Hello\")")
perl -wE'say(q{Hello})' # exec("perl", "-wEsay(q{Hello})")
perl -wE'say('\''Hello'\'')' # exec("perl", "-wEsay('Hello')")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |