假设我有一个C程序,我从bash运行它:
$ ./a.out 123 *
程序将输出所有命令行参数, 但它会显示这些:
Argument 1: 123 Argument 2: a.out
我可以在我的程序中做些什么来解决这个问题?
答案 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
完全禁用扩展,这可能会对您的脚本产生负面影响,具体取决于您的操作。