如何将实用程序(grep / sed)的返回值分配给数组?

时间:2015-01-27 09:09:09

标签: c++ arrays bash shell sed

我正在尝试创建一个shell脚本来创建一个Makefile。我的策略是创建两个数组,一个包含所有.cpp文件,另一个包含.cpp后缀替换为.o。然后我将.h和.ccp文件从(grep | sed)的返回值分配给变量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

2 个答案:

答案 0 :(得分:1)

您要做的是找到依赖项,这可能是g++ -MM更好的完成 - 它为您指定的文件生成依赖项列表,您可以在makefile中包含/使用它。

请参阅此文件的底部,我的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
 */

答案 1 :(得分:0)

$ declare -a my_array
$ my_array=(`ls -1 *.cpp`)
$ echo ${my_array[0]}
a.cpp
$ echo ${my_array[1]}
b.cpp