【发布时间】:2021-01-12 06:13:26
【问题描述】:
这个问题我有一段时间了。在我使用 bash 脚本的工作中,有很多情况下我必须将文件路径保存到变量中,以便在以后的命令中使用。我们使用带有后缀 T1w、T2w 和掩码的文件,并且在许多情况下,我们有一个优先文件(例如 T1ws),但在没有它们的情况下,将使用另一个文件(例如 T2w)。我通常使用以下 bash 语法来搜索适当的文件并将其保存到变量中(假设我在当前目录中搜索):
if [ -f xxx_T1w ]; then
var1=xxx_T1w
elif [ -f xxx_T2w ]; then
var1=xxx_T2w
fi
好吧,它可以工作,但我一直很好奇 bash 中是否有一种方法可以编写如下代码:如果两个给定文件之一存在,则取一个存在的文件,如果两者都存在,则取第一个文件。 我对伪代码很可怕,但可能是这样的:
if [ -f file_T1w ] || [ -f file_T2w ]; then
var1=existing file
fi
我经常重用这段代码,有时elif 语句会变得很长,如果我们可以浏览更长的优惠文件列表,我一直想知道是否有更紧凑的方法这个。
【问题讨论】:
-
I'm reusing this code a lot and sometimes the elif statements get pretty long所以写一个函数。我会选择您拥有的ifelse- 它非常清晰、易读且快速。 -
写个方法怎么样?
-
其中一个文件会一直存在吗?你能遇到两个文件都不存在的情况吗?
-
也许您应该将标题更新为“存在于多个变量中的变量”或列表或类似内容,因为您在这里的任务是避免“如果我有更长的文件列表,elif 语句会变得很长”
标签: bash if-statement logic