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 文件。
观察这里的 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[@]}"即使文件名包含空格或其他困难字符,该表单也可以安全使用
最佳做法是对 shell 变量使用小写或大小写混合的名称。系统对其变量使用大写名称,您不希望意外覆盖其中之一。因此,例如使用Src或src代替是一种很好的做法SRC。
正如 steeldriver 建议的那样,将此命令放在脚本的开头:
shopt -s nullglob
Run Code Online (Sandbox Code Playgroud)
设置 nullglob 后,SRC如果没有.c文件,则数组将为空。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |