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

How do you assign the return value of a utility (grep/sed) to an array?

本文关键字:返回值 分配 数组 sed 实用程序 grep      更新时间:2023-10-16

我正在尝试创建一个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