相关疑难解决方法(0)

如何将bash中的星号字符'*'作为我的C程序的参数传递?

假设我有一个C程序,我从bash运行它:

$ ./a.out 123 *
Run Code Online (Sandbox Code Playgroud)

该程序将输出所有命令行参数,但它将显示以下内容:

Argument 1: 123
Argument 2: a.out

我可以在我的程序中做些什么来解决这个问题?

bash escaping

27
推荐指数
5
解决办法
3万
查看次数

如何传递带有特殊字符的参数来调用shell脚本

使用如下所需的参数调用.sh(shell脚本): -

sh home/example.sh --context_param dbUserName=username --context_param dbPassword=exam!ple##### --context_param resultDate=2017-01-13
Run Code Online (Sandbox Code Playgroud)

使用参数dbUsername和password调用example.sh但是出现以下错误: -

-bash:!ple #####:找不到事件

我认为特殊字符限制命令执行.然后我如何传递特殊字符.任何帮助都会很明显.

linux bash shell quoting

2
推荐指数
1
解决办法
7659
查看次数

在C或C++中控制shell命令行通配符扩展

我正在用C++编写一个程序foo.它通常在命令行上调用,如下所示:

foo *.txt
Run Code Online (Sandbox Code Playgroud)

main()以正常方式接收参数.在许多系统上,argv[1]字面意思是*.txt,我必须调用系统例程来进行通配符扩展.但是,在Unix系统上,shell会在调用我的程序之前扩展通配符,并且所有匹配的文件名都将在其中argv.

假设我想添加一个开关到foo,导致它递归到子目录.

foo -a *.txt
Run Code Online (Sandbox Code Playgroud)

将处理当前目录及其所有子目录中的所有文本文件.

我没有看到这是如何完成的,因为当我的程序有机会看到它时-a,shell已经完成了扩展并且用户的*.txt输入丢失了.然而,有一些常见的Unix程序以这种方式工作.他们是如何做到的呢?

在Unix领域,我该如何控制通配符扩展?

(通过子目录递归只是一个例子.理想情况下,我试图理解控制通配符扩展的一般解决方案.)

c++ unix shell command-line wildcard

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

标签 统计

bash ×2

shell ×2

c++ ×1

command-line ×1

escaping ×1

linux ×1

quoting ×1

unix ×1

wildcard ×1