我编写了一个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
我该怎么解决这个问题?
除了代码中可能出现的一些拼写错误外,您的循环中存在一些错误
i in *$SUFFIXES
表示*.c .cpp .cc
,因此它在file.cpp或file.cc上不起作用${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