如何将实用程序 (grep/sed) 的返回值分配给数组
How do you assign the return value of a utility (grep/sed) to an array?
我正在尝试创建一个shell脚本来制作Makefile。我的策略是创建两个数组,一个包含所有.cpp文件,另一个包含 .o 替换.cpp后缀。然后,我将返回值 (grep | sed) 中的 .h 和 .ccp 文件分配给变量 temp,然后打印数组。但是,我不断收到错误:"语法错误:无效的算术运算符(错误标记为".o"我的理论是 grep 的返回值没有正确存储在 temp 中我对 bash 很陌生
cppfield=$(ls *.cpp)
x=0
for i in *.cpp; do
ofield[$x]="${i%.cpp}.o"
done
echo "$1 : ${ofield[@]}" > Makefile
echo " g++ -ansi -Wall -g -o $1 ${ofield[@]}" >> Makefile
for i in "${ofield[@]}"; do
temp=$(grep '#include "' ${cppfield[i]} | sed s/#include// | sed s/"//g)
echo "${ofield[i]} : ${cppfield[i]} ${temp[@]}" >> Makefile
echo " g++ -ansi -Wall -g -c ${cppfield[i]}" >> Makefile
done
您要做的是找到依赖项,这可能最好由g++ -MM
完成 - 它会为您指定的文件生成依赖项列表,您可以在 makefile 中包含/使用。
看到这个文件的底部,我的制作文件通常包含这样的东西:
include .depends
.depends: Makefile ${SOURCES}
${CXX} -MM ${CXXFLAGS} ${SOURCES} > $@
完整文件:https://github.com/Leporacanthicus/lacsap/blob/master/Makefile
您的 grep 解决方案运行良好,直到您执行以下操作:
#if _WIN32
#include <windows.h>
#else
#include <someother.h>
#endif
或
/* Don't need this any more...
#include "blah.h
*/
$ declare -a my_array
$ my_array=(`ls -1 *.cpp`)
$ echo ${my_array[0]}
a.cpp
$ echo ${my_array[1]}
b.cpp
相关文章:
- 将内存分配返回值强制转换为 TYPE 数组
- 将值分配给从函数返回的右值引用
- 直接在 C++ 中将值分配给引用返回类型
- 如何删除新分配的字符,这也是函数返回值?
- 当设置对象等于另一个函数的返回值时,为什么要调用移动构造函数/分配
- 获取“将返回值分配给新变量”的警告和输出是内存地址
- 为循环中多次调用的函数返回值预分配内存的正确方法是什么
- 我可以分配成员访问操作员的返回值吗?
- 用户定义功能的返回值的分配:性能
- 分配从upper_bound到reverse_iterator的返回值
- 内存分配,用于在C 11中循环中函数的返回值:如何优化
- 分配操作员返回值类型
- 为什么将boost::move()的返回值分配给非常数引用在C++0x模式下失败,但在C++03模式下有效
- 如果我的C++“新”内存分配失败,如何找出返回值
- 函数在无法分配空间时返回值
- 当我调用函数而不将其返回值分配给变量时会发生什么
- 如何将实用程序 (grep/sed) 的返回值分配给数组
- 我们不必将函数的返回值分配给变量吗?C/C++
- C ++中新运算符的返回类型是什么?为什么我们可以将返回值分配给变量(非指针)?
- C++:将正常返回值分配给指针