从脚本文件中的变量提取文件

从脚本文件中的变量提取文件
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[@]}"即使文件名包含空格或其他困难字符,该表单仍可安全使用

补充笔记

  1. 最佳实践是使用小写或大小写混合的名称来命名您的 shell 变量。系统使用大写名称来命名变量,您肯定不希望意外覆盖其中一个变量。因此,最佳实践是使用 或Srcsrc代替SRC

  2. 正如 steeldriver 建议的那样,将此命令放在脚本的开头:

    shopt -s nullglob
    

    设置 nullglob 后,SRC如果没有.c文件,数组将为空。

相关内容