我想简单地计算一个字符串的长度(即哈希值)。所以,我打开终端并这样做:
$ apropos length
Run Code Online (Sandbox Code Playgroud)
这给我带来了一堆命令/函数,这些命令/函数已经(3)
或(3ssl)
附加在它们的末尾。现在man man为我们提供了有关这些section numbers
含义的信息。
3 Library calls (functions within program libraries)
Run Code Online (Sandbox Code Playgroud)
出于好奇,我只是尝试了所有这些命令(希望至少有一个可以工作)
strcspn (3) - get length of a prefix substring
strlen (3) - calculate the length of a string
strnlen (3) - determine the length of a fixed-size string
strspn (3) - get length of a prefix substring
wcslen (3) - determine the length of a wide-character string
wcsnlen (3) - determine the length of a fixed-size wide-character …
Run Code Online (Sandbox Code Playgroud) 我在 SuperUser 上回答了这个问题,该问题与 grepping 输出时使用的正则表达式类型有关。
我给出的答案是这样的:
tail -f log | grep "some_string.*some_string"
Run Code Online (Sandbox Code Playgroud)
然后,在对我的回答@Bob 的三个评论中写道:
.*
是贪婪的,可能会捕获比您想要的更多。.*?
通常更好。
那么这个,
这
?
是 上的修饰符*
,使其变得懒惰而不是贪婪的默认值。假设 PCRE。
我用谷歌搜索PCRE
,但无法在我的答案中得到这有什么意义?
最后这个,
我还应该指出这是正则表达式(默认情况下 grep 执行 POSIX 正则表达式),而不是 shell glob。
我只知道 Regex 是什么以及它在 grep 命令中的基本用法。所以,我无法得到这 3 条评论中的任何一条,我有这些问题:
.*?
vs. 的用法有什么区别.*
?理解评论也会有帮助,如果有人可以的话
更新:作为问题的答案Regex 与 Shell Globs 有何不同? @Kusalananda在他的评论中提供了这个链接。
注意:如果需要,请在回答参考上下文之前阅读我对这个问题的回答。
我在阅读有关 IFS 的博客时看到了这一行:
for i in $(<test.txt)
Run Code Online (Sandbox Code Playgroud)
并认为$(<test.txt)
将文件内容打印到 STDOUT。我可能在这方面错了,但出于好奇,我尝试在 shell 上进行。所以拿起一个名为array
随机数据的随机文件,
首先做了一个cat array
给我这个的:
amit@C0deDaedalus:~/test$
amit@C0deDaedalus:~/test$ cat array
1) Ottawa Canada 345644
2) Kabul Afghanistan 667345
3) Paris France 214423
4) Moscow Russia 128793
5) Delhi India 142894
Run Code Online (Sandbox Code Playgroud)
然后这样做$(<array)
给了我这个:
amit@C0deDaedalus:~/test$ $(<array)
1) Ottawa Ca: command not found
Run Code Online (Sandbox Code Playgroud)
我只知道它<
用于输入重定向,但没有确切地获得 shell 在这里将其解释为命令的内容。
谁能解释这个奇怪的 shell 输出背后的概念?
更新 :-
在运行时set -x
它给出了这个:
amit@C0deDaedalus:~/test$ $(<array)
+ '1)' Ottawa Canada 345644 '2)' Kabul Afghanistan …
Run Code Online (Sandbox Code Playgroud)