首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将一个元素附加到GNU bash数组变量,并将该数组变量用作ELF可执行文件的参数

如何将一个元素附加到GNU bash数组变量,并将该数组变量用作ELF可执行文件的参数
EN

Stack Overflow用户
提问于 2021-09-20 08:18:28
回答 1查看 59关注 0票数 0

比斯蒙静态源代码分析器(GPLv3+许可,49dd1bd232854a)中,用于嵌入式C和C++代码(在x86-64上使用GCC 10直接编译器的插件),我有一个测试Hello-World-Analyze,它使用GNU数组变量bismon_hello_args

该变量声明(在第56行)时使用:

代码语言:javascript
复制
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行):

代码语言:javascript
复制
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中)后面跟着

代码语言:javascript
复制
./bismon $bismon_hello_args &

但是调试打印显示bismon是用argc=2调用的,所以有一个长的argv[1]程序参数.

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-20 08:32:02

仅仅是+=将一个字符串添加到现有的字符串中。您可能需要bismon_hello_args+=("$f");; (也请注意引号)。要调用程序,请使用./bismon "${bismon_hello_args[@]}" & (再次注意引号)。

使用数组变量的语法与简单标量的语法不同。这个语法继承自ksh,而ksh又需要找到一种方法来引入新的行为,而不牺牲与现有Bourne脚本的兼容性。

没有数组修饰符,Bash就是访问数组的第一个元素。 (这让初学者和有经验的从业者都感到困惑)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69251163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档