很抱歉,如果我觉得这个问题很愚蠢,但我很想知道这件事。
我想简单地计算一个字符串的长度(即哈希值)。所以,我打开了终端并做了这个:
$ apropos length
它返回了我的一堆命令/函数,其末尾附加了(3)
或(3ssl)
。现在, man man 会向我们提供有关这些section numbers
含义的信息。
3 Library calls (functions within program libraries)
出于好奇,我只是尝试了所有这些命令(希望至少有一个可以工作)
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 string
并且每个命令都没有相同的错误
$ strnlen HelloWorld
$ strnlen: command not found
嗯,我知道 how to find length of string in shell 使用wc -m
,expr length
和其他解决方法。但是,
是否可以编写一个可以在内部调用这些库命令并完成任务的bash脚本?
答案 0 :(得分:2)
你不能从你的Bash shell执行任何库函数(一般情况下) - 当然不包括shell调用的许多库函数(例如它的cd
内置函数将调用{ {3}}系统调用)。
你应该使用一些程序(通常由C编译器生成的一些chdir(2),或其他一些编译语言,如Go,Ocaml,C ++,Rust,...)来调用这些功能。一旦你有了一个程序,你的shell就会使用executable然后fork(2)来运行它。
有些炮弹(例如execve(2))也接受zsh
。你可以编写(在C中,然后编译它)一个扩展,创建它的插件并加载该插件。
实际上,要从shell运行plugins函数,您应该编写一些调用它的C源代码(例如yourprog.c
),将该源代码编译为wcslen(3)可执行文件(例如,使用带有ELF的gcc -Wall -Wextra -g yourprog.c -o yourbin
,然后使用适当的参数运行./yourbin
可执行文件。您应该在程序中设置GCC并花时间调试它(所以bugs以了解出现了什么问题,然后在yourprog.c
中改进代码并重复)。
gdb
debugger返回{ {1}}句柄,fopen(3)和readdir(3)不操纵字符串等等...)。因此存在“阻抗不匹配”,您需要拥有或编写代码来解决这个问题。
您可能有兴趣使用某些fgetpwent(3),例如scripting language或Guile。
顺便说一句,请注意今天在Linux上的实践Python(因此您不太可能想要致电FILE*
)。