Shell脚本没有在特定扩展名的所有文件中运行



我编写了一个shell脚本,该脚本在目录中搜索与env var suffixes中的任何后缀匹配的文件。

#!/bin/bash
SUFFIXES=$(SUFFIXES:-'.c .cpp .cc'}
CC=${CC:-gcc}
CFLAGS=${CFLAGS:-"-Wall -Werror"}
VERBOSE=${VERBOSE:-1}
for i in *$SUFFIXES
do
$CC $CLAGS -o ${i%$SUFFIXES} $i 2> /dev/null
if [ $VERBOSE == 1 ]
then
echo "$CC $CLAGS -o ${i%$SUFFIXES} $i"
fi
done

假设我有一个包含hello.c、hey.c、howdy.cc和hallo.cpp的目录。每当脚本在不更改终端中环境变量的情况下运行时,我都会得到以下输出:

gcc -Wall -Werror -o hello.c hello.c
gcc -Wall -Werror -o hey.c hey.c
gcc -Wall -Werror -o .cc .cc
gcc -Wall -Werror -o .cpp .cpp

我试图得到的输出是:

gcc -Wall -Werror -o hello hello.c
gcc -Wall -Werror -o hey hey.c
gcc -Wall -Werror -o howdy howdy.cc
gcc -Wall -Werror -o hallo hallo.cpp

我该怎么解决这个问题?

除了代码中可能出现的一些拼写错误外,您的循环中存在一些错误

  1. i in *$SUFFIXES表示*.c .cpp .cc,因此它在file.cpp或file.cc上不起作用
  2. ${i%$SUFFIXES}尝试从文件名末尾剪切您定义的所有后缀,同时在每个文件名中都有一个后缀

也许内部循环将有助于

for i in $SUFFIXES
do
for j in *$i
do                                                    
$CC $CFLAGS -o ${j%$i} $j 2> /dev/null
if [ $VERBOSE == 1 ]
then
echo "$CC $CFLAGS -o ${j%$i} $j"
fi
done
done

最新更新