bashshell脚本将具有特定扩展名的第一个文件复制到当前目录

bashshell脚本将具有特定扩展名的第一个文件复制到当前目录,bash,shell,Bash,Shell,我有一个包含多个.c源文件的目录,我正在尝试在另一个目录中编写一个shell脚本,该脚本将从上一个目录复制第一个.c文件,编译、运行并删除它。现在我了解了如何编译、运行和删除这些文件,但当目录中有多个扩展名相同的文件时,如何只获取一个.c文件而不知道其名称,这让我感到困惑。一种方法是使用循环,然后在第一次迭代后中断: 用于dir/*.c中的f;做 cp“$f”。 #编撰 #跑 #删除 打破 完成 您尚未指定如何定义“第一个”,但您可以使用set实现此目的: set -- source_dir/*

我有一个包含多个.c源文件的目录,我正在尝试在另一个目录中编写一个shell脚本,该脚本将从上一个目录复制第一个.c文件,编译、运行并删除它。现在我了解了如何编译、运行和删除这些文件,但当目录中有多个扩展名相同的文件时,如何只获取一个.c文件而不知道其名称,这让我感到困惑。

一种方法是使用循环,然后在第一次迭代后中断:

用于dir/*.c中的f;做
cp“$f”。
#编撰
#跑
#删除
打破
完成

您尚未指定如何定义“第一个”,但您可以使用
set
实现此目的:

set -- source_dir/*.c
cp "$1" .
# ...
rm "$1"
假设您所说的“第一个”是指排序列表中的第一个文件

for循环工作正常,但您也可以执行以下操作:

file=`ls -1 dir/*.c | head -1`
# compile $file && run $file && delete $file

在bash中,可以使用数组:

files=(*.c)
echo "compiling ${files[0]}"
compile ${files[0]}

如果你先
shopt-s nullglob
,如果没有.c文件,循环将被跳过。在这里引用
$1
可能是明智的。我完全同意你的回答和你提到的文章。然而,对于特定用例,在受控环境中,它仍然可以工作。考虑风险是过程的一部分。