$
我只是尝试传递以less开头的搜索模式:
less +/'\$l' myfile.pl
我得到了
There is no -l option ("less --help" for help)
阅读手册后,我尝试了替代-p
选项
less -p'\$l' myfile.pl
并得到同样的错误。
然后我发现,(注意后面的空格-p
)
less -p '\$l' myfile.pl
有效,即打开文件时没有错误消息并跳转到第一次出现$l
.
长选项变体--pattern=$l
不起作用
less --pattern='\$l' myfile.pl
There is no -l option ("less --help" for help)
而空间而不是=
作品
less --pattern '\$l' myfile.pl
这是
less -V
less 458 (POSIX regular expressions)
Copyright (C) 1984-2012 Mark Nudelman
在 openSUSE Leap 42.3 上
现在的问题是:这是一个错误吗?
答案1
从man less
:
--use-backslash This option changes the interpretations of options which follow this one. After the --use-backslash option, any backslash in an option string is removed and the following character is taken literally. This allows a dollar sign to be included in option strings.
然后我们需要转义反斜杠和美元,所以
less --use-backslash +'/\\\$l' myfile.pl
答案2
这是由一个特征。从man less
:
某些选项(例如 -k 或 -D)需要在选项字母后跟一个字符串。当找到美元符号 ($) 时,该选项的字符串被视为结束。例如,您可以在 MS-DOS 上设置两个 -D 选项,如下所示:
LESS="Dn9.1$Ds4.1"
所以你可以这样做:
LESS='ppattern$i' PAGER=less man less
首先,不区分大小写地less
查找。pattern
现在,虽然它对于变量有意义$LESS
,但对于命令行上选项的参数却没有什么意义。在这种情况下,它可能被视为您可能想要报告的错误。
另请注意,$
仅当该处理 发生在与包含解释您的vs和vs$
之间的差异的选项相同的参数中时,才会进行处理,从而导致混乱并更有理由认为它可能被视为错误。-p '\$l'
-p'\$l'
--pattern '\$l'
--pattern='\$l'
请注意,您还会遇到以下问题:
less -p' foo'
在哪里less
寻找"foo"
替代" foo"
(再次使用-p ' foo'
替代)。查看源代码scan_option()
中的函数以了解详细信息。options.c