在比斯蒙静态源代码分析器(GPLv3+许可,49dd1bd232854a)中,用于嵌入式C和C++代码(在x86-64上使用GCC 10直接编译器的插件),我有一个测试Hello-World-Analyze,它使用GNU数组变量bismon_hello_args。
该变量声明(在第56行)时使用:
declare -a bismon_hello_args我想从脚本参数中填充这个bismon_hello_args数组变量,从--bismon开始,然后用几个参数调用bismon可执行文件(从C源文件编译),main是这个bismon_hello_args数组变量的元素。
因此,如果以Hello-World-Analyze --bismon-debug-after-load --bismon-anon-web-cookie=/tmp/bismoncookie --gcc=/usr/local/bin/gcc-11的形式调用我的Hello-World-Analyze --bismon-debug-after-load --bismon-anon-web-cookie=/tmp/bismoncookie --gcc=/usr/local/bin/gcc-11脚本,我希望启动bismon ELF可执行文件时使用两个参数(用C语言来说是这样的argc=3 ):--bismon-debug-after-load后面跟着--bismon-anon-web-cookie=/tmp/bismoncookie
出于某种原因,该Hello-World-Analyze脚本中的以下代码(第58至64行):
for f in "$@"; do
case "$f" in
--bismon*) bismon_hello_args+=$f;;
--asm) export BISMON_PLUGIN_ASMOUT=/tmp/gcc10_metaplugin_BMGCC.s;;
--gcc=*) export BISMON_GCC=$(echo $f | /bin/sed -e s/--gcc=//);;
esac
done不像预期的那样工作。它应该是(并且在以前的e8c3d795bc9dc8中)后面跟着
./bismon $bismon_hello_args &但是调试打印显示bismon是用argc=2调用的,所以有一个长的argv[1]程序参数.
我做错了什么?
发布于 2021-09-20 08:32:02
仅仅是+=将一个字符串添加到现有的字符串中。您可能需要bismon_hello_args+=("$f");; (也请注意引号)。要调用程序,请使用./bismon "${bismon_hello_args[@]}" & (再次注意引号)。
使用数组变量的语法与简单标量的语法不同。这个语法继承自ksh,而ksh又需要找到一种方法来引入新的行为,而不牺牲与现有Bourne脚本的兼容性。
没有数组修饰符,Bash就是访问数组的第一个元素。 (这让初学者和有经验的从业者都感到困惑)。
https://stackoverflow.com/questions/69251163
复制相似问题