命令行程序的通配符入参

今天突然想到一个问题:当命令行程序的入参为一个通配符(比如./a.out *)时,会是什么样的情况? 程序得到的入参是通配符*吗?


源码:

#include <stdio.h>

int main(int argc, char *argv[])
{
        int i;

        printf("argc: %d\n", argc);
        for(i = 0; i < argc; i++)
                printf("argv[%d]: %s\n", i, argv[i]);

        return 0;
}

执行结果:

$ ls
111.txt  2byte.txt  a.out  main.c  minicom.txt  src
$ ./a.out *
argc: 7
argv[0]: ./a.out
argv[1]: 111.txt
argv[2]: 2byte.txt
argv[3]: a.out
argv[4]: main.c
argv[5]: minicom.txt
argv[6]: src
$ ./a.out *.txt
argc: 4
argv[0]: ./a.out
argv[1]: 111.txt
argv[2]: 2byte.txt
argv[3]: minicom.txt

运行环境:

$uname -a
Linux xxxxx 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --version
gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

结论:当运行程序时所给的入参是通配符时,程序实际所得到的入参不是简单的通配符,而是这个通配符的实际展开。


ps.感觉上还是有点怪怪的,呵呵。

### 如何在 SVN 命令行中使用通配符 SVN 的命令行工具本身并不支持直接通过内置功能解析文件名中的通配符(wildcard)。这是因为 SVN 是基于版本库的操作工具,而通配符通常由 shell 或其他外部程序处理。然而,在实际操作中可以通过一些技巧实现类似的功能。 #### 使用 Shell 处理通配符 大多数操作系统上的 shell 都可以自动扩展通配符为匹配的文件列表。例如: - **Linux/Unix/macOS**: 可以利用 Bash 或 Zsh 中的 glob 功能来扩展通配符。 ```bash svn add *.txt ``` 上述命令会在当前目录下查找所有 `.txt` 文件并将其添加到版本控制中[^1]。 - **Windows Command Prompt (CMD)**: Windows 的 CMD 不会自动扩展通配符,因此需要手动列出文件或将通配符逻辑移至批处理脚本中完成。 ```cmd for %f in (*.txt) do svn add "%f" ``` 这里 `for` 循环用于遍历所有 `.txt` 文件并将它们逐一传递给 `svn add` 命令执行[^2]。 #### 脚本自动化 对于更复杂的场景,建议编写简单的脚本来批量处理带有通配符的任务。以下是 Python 和 Bash 的两个示例: ##### Bash 脚本 ```bash #!/bin/bash files=$(ls *.c) for file in $files; do svn add "$file" done ``` 此脚本将当前目录下的所有 `.c` 文件加版本控制。 ##### Python 脚本 ```python import os import subprocess directory = './' pattern = '*.py' for filename in filter(lambda f: f.endswith('.py'), os.listdir(directory)): subprocess.run(['svn', 'add', filename]) ``` 上述代码片段实现了相同的目标——将特定模式的所有文件添加到 Subversion 版本控制系统中。 #### 注意事项 当运行涉及路径的服务端配置时,请务必遵循正确的路径约定以防误操作。比如启动 `svnserve` 服务时应指明仓库所在父级目录而非具体仓库位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值