【发布时间】:2013-03-05 14:11:31
【问题描述】:
我有一个包含多个 .c 源文件的目录,我正在尝试在另一个目录中编写一个 shell 脚本,该脚本将从前一个目录中复制第一个 .c 文件,对其进行编译、运行和删除。现在我了解了如何编译、运行和删除文件,但是当目录中有多个具有相同扩展名的文件时,如何在不知道其名称的情况下只获取一个 .c 文件?
【问题讨论】:
我有一个包含多个 .c 源文件的目录,我正在尝试在另一个目录中编写一个 shell 脚本,该脚本将从前一个目录中复制第一个 .c 文件,对其进行编译、运行和删除。现在我了解了如何编译、运行和删除文件,但是当目录中有多个具有相同扩展名的文件时,如何在不知道其名称的情况下只获取一个 .c 文件?
【问题讨论】:
一种方法是使用循环,然后在第一次迭代后中断:
for f in dir/*.c; do
cp "$f" .
# compile
# run
# delete
break
done
【讨论】:
shopt -s nullglob,如果没有 .c 文件,就会跳过循环。
假设您所说的“第一个”是指排序列表中的第一个文件。
for 循环可以正常工作,但您也可以这样做:
file=`ls -1 dir/*.c | head -1`
# compile $file && run $file && delete $file
【讨论】:
在 bash 中你可以使用数组:
files=(*.c)
echo "compiling ${files[0]}"
compile ${files[0]}
【讨论】:
您尚未指定如何定义“第一个”,但您可以为此使用set:
set -- source_dir/*.c
cp "$1" .
# ...
rm "$1"
【讨论】:
$1 可能是明智的。