小编C0d*_*lus的帖子

如何从shell执行库命令?

我想简单地计算一个字符串的长度(即哈希值)。所以,我打开终端并这样做:

$ 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)

shell libraries

28
推荐指数
4
解决办法
8319
查看次数

如何或为什么使用`.*?` 比`.*` 更好?

在 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在他的评论中提供了这个链接

注意:如果需要,请在回答参考上下文之前阅读我对这个问题的回答。

regular-expression wildcards

11
推荐指数
2
解决办法
2605
查看次数

为什么 shell 将 $(<file) 的一部分输出视为命令?

我在阅读有关 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)

shell command-substitution output

3
推荐指数
1
解决办法
329
查看次数