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

时间:2010-05-03 02:05:10

标签: bash escaping

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

$ ./a.out 123 *

程序将输出所有命令行参数, 但它会显示这些:

Argument 1: 123
Argument 2: a.out

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

5 个答案:

答案 0 :(得分:31)

shell正在用目录中每个文件的名称替换星号。

要传递文字星号,您应该能够将其转义:

$ ./a.out 123 \*

答案 1 :(得分:21)

另一种选择是使用set -f来关闭扩展。比较:

echo *

v.s。

set -f
echo *

您可以使用set +f

重新打开它
set -f
echo *
set +f
echo *

答案 2 :(得分:18)

你可以在shell中引用它

./a.out 123 '*'

你的程序中没有什么可以做的,因为*扩展是由shell完成的(与Windows相比,它由程序完成)。

答案 3 :(得分:4)

这与您的计划没有任何关系。

*是Bash中的通配符,表示“当前目录中的所有文件”。如果你想将一个星号作为参数传递给你的程序,你就像对待其他程序一样:你用反斜杠转义它或引用它。

答案 4 :(得分:2)

另一种方法是以#!/bin/bash -f作为第一行启动脚本,这将允许您接受文字字符串作为参数(包括星号),这样就可以运行./a.out 123 *使用所需的输入,但请注意bash -f完全禁用扩展,这可能会对您的脚本产生负面影响,具体取决于您的操作。