SRC=(*.c)
for j in $SRC
do
if test "'echo $j*.c'" != "$j*.c"; then
build.log/_compile -v $j*.c
fi
done
只提取第一个文件,为什么?这个想法是让循环独立提取和编译每个文件,从而产生多个 .o 文件。
答案1
注意此处的 echo 命令仅显示一个文件:
$ ls
file1.c file2.c file3.c file4.c
$ src=(*.c)
$ echo $src
file1.c
如果要访问数组的所有元素,则必须使用更复杂的形式:
$ echo "${src[@]}"
file1.c file2.c file3.c file4.c
因此,替换:
for j in $SRC
和:
for j in "${SRC[@]}"
"${SRC[@]}"
即使文件名包含空格或其他困难字符,该表单仍可安全使用
补充笔记
最佳实践是使用小写或大小写混合的名称来命名您的 shell 变量。系统使用大写名称来命名变量,您肯定不希望意外覆盖其中一个变量。因此,最佳实践是使用 或
Src
来src
代替SRC
。正如 steeldriver 建议的那样,将此命令放在脚本的开头:
shopt -s nullglob
设置 nullglob 后,
SRC
如果没有.c
文件,数组将为空。