【发布时间】:2022-12-03 06:07:59
【问题描述】:
查询有点低,但这里是: bash 外壳脚本。 POSIX,薄荷 21
我只想要目录中的一个/任何 (mp3) 文件。作为样本。 在正常执行中,完整运行,代码将是这样的
for f in *.mp3 do
#statements
done
这很好用,但是如果我想在不循环的情况下只对这样一个数组/glob(?)的一个文件进行采样,我该怎么做呢?我不在乎哪个文件,只是它是我正在工作的目录中的 mp3。 我应该只开始这个 for 循环,然后在一个语句后退出(中断),还是有更整洁的方式更适合工作的方式?
for f in *.mp3 do
#statement
break
done
Ta(不敢相信我问这个感觉有多蠢,看到答案我的额头会痛)
【问题讨论】:
-
我会首先将所有文件名存储到一个数组中,然后从数组中随机选择一个元素,例如使用 bash 变量
$RANDOM。 -
arr=(*.mp3); f="${arr[0]}"?但它比你自己的解决方案好得多吗?注意:如果存在没有*.mp3文件的风险,请使用shopt -s nullglob。 -
带有
break的 OP 代码似乎优于我。如果您不关心它们是什么,为什么要将火柴收集到内存中? -
我将研究那个“随机”的想法——虽然不需要随机——并且数组创建对于其他应用程序很方便(我正在学习东西),我不知道这样简单的“globbing”是可能的,甚至“对于 f与 python glob 相比,in *.mp3" 对我来说似乎不是特定的。但这就是我喜欢 shell 脚本的地方,就像我在命令行上一样。 @tripleee 你的评论帮助我看到什么是“更好”的平衡。感谢你们所有人
-
@Dee 因为你在问题中指定了 POSIX,所以我认为你需要知道 POSIX shell 没有“数组”
标签: bash shell file-handling