假设我有一个C程序,我从bash运行它:
$ ./a.out 123 *
Run Code Online (Sandbox Code Playgroud)
该程序将输出所有命令行参数,但它将显示以下内容:
Argument 1: 123 Argument 2: a.out
我可以在我的程序中做些什么来解决这个问题?
使用如下所需的参数调用.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 #####:找不到事件
我认为特殊字符限制命令执行.然后我如何传递特殊字符.任何帮助都会很明显.
我正在用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领域,我该如何控制通配符扩展?
(通过子目录递归只是一个例子.理想情况下,我试图理解控制通配符扩展的一般解决方案.)