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

0 bash

SRC=(*.c)



for j in $SRC
do
if test "'echo $j*.c'" != "$j*.c"; then
build.log/_compile -v $j*.c
fi
done
Run Code Online (Sandbox Code Playgroud)

只提取第一个文件为什么?这个想法是让循环独立地提取和编译每个文件,提供多个 .o 文件。

Joh*_*024 5

观察这里的 echo 命令只显示一个文件:

$ ls
file1.c  file2.c  file3.c  file4.c
$ src=(*.c)
$ echo $src
file1.c
Run Code Online (Sandbox Code Playgroud)

如果要访问数组的所有元素,则必须使用更复杂的形式:

$ echo "${src[@]}"
file1.c file2.c file3.c file4.c
Run Code Online (Sandbox Code Playgroud)

因此,替换:

for j in $SRC
Run Code Online (Sandbox Code Playgroud)

和:

for j in "${SRC[@]}"
Run Code Online (Sandbox Code Playgroud)

"${SRC[@]}"即使文件名包含空格或其他困难字符,该表单也可以安全使用

补充说明

  1. 最佳做法是对 shell 变量使用小写或大小写混合的名称。系统对其变量使用大写名称,您不希望意外覆盖其中之一。因此,例如使用Srcsrc代替是一种很好的做法SRC

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

    shopt -s nullglob
    
    Run Code Online (Sandbox Code Playgroud)

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