假设我有一个C程序,我从bash运行它:
$ ./a.out 123 *
Run Code Online (Sandbox Code Playgroud)
该程序将输出所有命令行参数,但它将显示以下内容:
Argument 1: 123 Argument 2: a.out
我可以在我的程序中做些什么来解决这个问题?
Jam*_*lis 32
shell正在用目录中每个文件的名称替换星号.
要传递文字星号,您应该能够将其转义:
$ ./a.out 123 \*
Run Code Online (Sandbox Code Playgroud)
fra*_*nkc 22
另一种选择是用来set -f关闭扩展.相比:
echo *
Run Code Online (Sandbox Code Playgroud)
VS
set -f
echo *
Run Code Online (Sandbox Code Playgroud)
您可以将其重新打开set +f:
set -f
echo *
set +f
echo *
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 18
你可以在shell中引用它
./a.out 123 '*'
Run Code Online (Sandbox Code Playgroud)
你的程序中没有什么可以做的,因为*扩展是由shell完成的(与Windows相比,它由程序完成).
另一种选择是将脚本#!/bin/bash -f作为第一行开始,这将允许您接受文字字符串作为参数(包括星号),从而允许您./a.out 123 *使用所需的输入运行,但请注意bash -f完全禁用扩展,并且这可能会对您的脚本产生不利影响,具体取决于您的操作。
这与您的程序没有任何关系。
该*是Bash的一个通配符,它的意思是“在当前目录下的所有文件”。如果您想将星号作为参数传递给您的程序,您可以按照与其他所有程序相同的方式进行操作:用反斜杠将其转义或引用它。