这是一个我以前从未见过的问题,我认为它值得分享。我不确定它为什么会发生。
这就是我调用程序的方式:
./foo -switch1 arg1 -switch2 arg2 -switch3 arg3|arg4|arg5 -switch4 -arg6
每个开关用于指示不同类型的参数,我相应地解析它们。
问题出现在 switch3 上,它表示arg3
, arg4
,arg5
都对应同一个 switch 并且使用|
字符来描述。
出于某种原因,我可以完美地运行该程序,但是当我尝试使用 gdb 对其进行调试时,我的程序崩溃并出现during startup, program exited with code 127
错误。
这就是我感兴趣的地方。它还说bin/bash: arg4 not found
。它在第一个|
字符之后接受参数,现在我假设它认为它是管道字符,并尝试调用 bash 脚本。
为什么会这样???编译器是否不采用整个命令行字符串并将空格分隔的标记视为不同的参数?为什么|
被解释不同?我尝试添加arg3|arg4|arg5
倒引号""
,效果很好。我还尝试将它们分开-
,例如。arg3-arg4-arg5
,这也很好用。