使用ls时如何引用字符串内容

How to refer to string content when using ls

我正在使用基于 SPP 的 IRAF,它是 Fortran 和 C 的混合体。我正在寻找一种在使用 ls 时引用字符串内容的方法。例如,如果我想列出目录中包含单词 hola 的每个文件,我可以键入 ls *hola*。假设我有一个名为 id 的字符串,其内容是 world hola。 id里面的内容怎么引用呢?我正在寻找某种 ls id(我知道构造不会起作用),returns 与 ls *hola*.

中的结果相同

提前致谢。

编辑:SPP 以某种方式隐藏在 Internet 上,但这里有参考手册https://www.mn.uio.no/astro/english/services/it/help/visualization/iraf/SPPManual.pdf,尽管我在那里没有找到与该主题相关的任何信息。

使用 SPP 的 C 端,如果您可以访问 C headers,简单的方法是使用类似

的东西
#include <stdio.h>
#include <stdlib.h>

    int main(void)
    {
        char* command = "ls";
        char* args = "*.c";
        char line[80];
        sprintf( line, " %s %s\n", command, args );
        system(line);
    };

但是在 C 中,您可以 dirent.h 在那里找到执行此操作的函数。在您的机器上尝试 man opendir

OPENDIR(3)                                    Linux Programmer's Manual                                    OPENDIR(3)

NAME
       opendir, fdopendir - open a directory

SYNOPSIS
       #include <sys/types.h>
       #include <dirent.h>

       DIR *opendir(const char *name);
       DIR *fdopendir(int fd);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       fdopendir():
           Since glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Before glibc 2.10:
               _GNU_SOURCE

DESCRIPTION
       The  opendir() function opens a directory stream corresponding to the directory name, and returns a pointer to
       the directory stream.  The stream is positioned at the first entry in the directory.

       The fdopendir() function is like opendir(), but returns a directory stream for the directory  referred  to  by
       the open file descriptor fd.  After a successful call to fdopendir(), fd is used internally by the implementa‐
       tion, and should not otherwise be used by the application.

RETURN VALUE
...

首先,我建议根本不要使用 SPP(和 IRAF)。 IRAF 是 out of official maintainance now,为已弃用的软件编写新代码可能是死胡同。

关于您的问题:SPP 附带一个函数 fntopnb() 用于 IRAF 样式访问文件名模板。它们记录在第 101ff 页。 SPP手册。用法示例可以在 IRAF 的 pkg/system/files.x 来源中找到:

call salloc (fname, SZ_FNAME, TY_CHAR)

list = fntopnb ("*id*", NO)
while (fntgfnb (list, Memc[fname], SZ_FNAME) != EOF) {
    call printf ("%s\n")
    call pargstr (Memc[fname])
}

call fntclsb (list)