问题描述
我对 C 和编程有点陌生,所以请谨慎对待。 基本上,我试图让 getopt 函数接收它们之间带有空格的参数。 For example:
./covid19 -i f_texto1.csv -L all -S inf 2020-27 -D inf -P max 5000 -o f_dados.dat
在这里,当我想输入 -S
时,我需要说 inf
和 2020 年的一周,但我只能让它占据“inf”部分。
解决方法
如果您提供的参数中带有空格,getopt()
和朋友将返回这些带有空格的参数。您必须告诉 shell 保留空格——通常使用引号,但如果您愿意,也可以使用反斜杠。
例如:
./program one 'two potatoes' 'three spaces' " spaces before and after " \ \ seven\ backslashes\ \\\ vanish\ \
标准的 Unix shell 会这样处理,以便在程序内部,int main(int argc,char **argv)
函数看到:
argc = 6;
argv[0] = "./program";
argv[1] = "one";
argv[2] = "two potatoes";
argv[3] = "three spaces";
argv[4] = " spaces before and after ";
argv[5] = " seven backslashes \\ vanish "; // Note there's a single backslash left
argv[6] = NULL;
当然,其中没有 -x
类型选项,但您可以根据需要添加它们。当相应的参数(或参数的一部分)包含空格时,optarg
中的值将包含空格。
了解 shell 与其执行的程序之间的交互非常重要。
您需要将命令行输入为:
./covid19 -i f_texto1.csv -L all -S "inf 2020-27" -D inf -P "max 5000" -o f_dados.dat
使用 GNU getopt()
,假设选项字符串包含“i:L:S:D:P:o:”,并且没有 export POSIXLY_CORRECT=1
,您将获得 2020-27
和 { {1}} 作为位置参数在选项 5000
、-i
、-L
、-S
、-D
和 -P
已在主 -o
循环。