- 论坛徽章:
- 307
|
本帖最后由 sunzhiguolu 于 2015-09-07 20:39 编辑
回复 17# Shell_HAT
man bash
-- A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. An argument of - is equivalent to --.
大神,您有点难为我了. 我的英语太烂了,我将句子用颜色分为3部分. 将我的理解贴出,有不对的地方还请大神指点...
1. 如果一对符号 "--"是以选项的最后一部分出现那么其后出现的以 "-" 开头的选项将不作为选项进行处理
2. 跟在一对 "--" 后面的任何参数都只作为文件名或者参数进行处理 (红色部分也不太明白)
3. 这一句不太懂...
还请您多多指点... 小弟拜谢...
按照以上的注释要求进行测试结果如下:
echo -e "-e\n-i\n-n" | grep -P -- -n '-(e|i|n)'
grep: -(i|n|e): 没有那个文件或目录
从上述的结果,感觉 "-n" 被作为搜索字符串进行处理,其后的 '-(e|i|n)' 被作为一个文件名进行解析.
再次进行印证:- cat a
- -i
- -n
- -e
- ---------------------------------
- grep -- -n a
- -n
复制代码 根据得到的结果,如果作为选项部分最后一次出现的连续的两个 "--", 在其后面只能存在两种形式的参数 (不知我的这种叫法是否合理):
a. 当接受来自管道命令的结果时,那么在其后只能接受一个作为搜索字符串的参数,即使指定的是一个选项也按照搜索字符串
进行处理;
b. 如果为其后添加第二个参数时, grep 命令由于 "--" 的作用,将其理解为一个文件名进行解析;
由此得出:
A. 如果 grep 命令接受来自管道的命令的结果. 那么 选项 "--" 后面只能是 "搜索字符串";
B. 如果是从文件读入文本的话, 选项 "--" 后面参数的顺序为固定的 "搜索字符串", "目标文件";
不知我的理解是否正确,还请您指点...
|
|