Linux shell 脚本命令变量带括号用于范围选择

问题描述 投票:0回答:1

我正在编写一个 shell 脚本,该脚本根据文件名创建文件列表,但我需要使用括号来使用指定范围。例如。

{30..35}

不知何故,shell 脚本不接受命令中的括号,作为我的脚本的示例:

InicialMin=$(date -d "-5 minutes" +%M)
FinalMin=$(date +%M)
MinRange="${MinInicial}..${MinFinal}" # Outputs for example 30..35

Results=$(ls -lrth /path/to/my/directory/SOMEFILES_20230922{$MinRange}.log | wc -l)
echo "Files found: ${Results}"

当我在shell中执行命令行时,它工作正常:

ls -lrth /path/to/my/directory/SOMEFILES_20230922{35..40}.log | wc -l
153

但是当我使用里面的命令执行我的shell脚本时,它说:

ls: cannot access /path/to/my/directory/SOMEFILES_20230922{35..40}.log: No such file or directory

我需要根据文件名进行列表,而不是根据修改时间(查找)。

我尝试了各种转义脚本中的“{}”字符,但没有成功。

有没有办法在shell脚本中执行以下命令?

ls -lrth /path/to/my/directory/SOMEFILES_20230922{$MinRange}.log

尝试:

Results=$(ls -lrth /path/to/my/directory/SOMEFILES_20230922\{$MinRange\}.log | wc -l)
Results=$(ls -lrth /path/to/my/directory/SOMEFILES_20230922'{'$MinRange'}'.log | wc -l)
Results=$(ls -lrth /path/to/my/directory/SOMEFILES_20230922{{$MinRange}}.log | wc -l)
shell variables range brackets
1个回答
0
投票

回答你的问题:

是否可以在 shell 中执行以下命令 脚本?

ls -lrth /path/to/my/directory/SOMEFILES_20230922{$MinRange}.log

否,因为大括号扩展发生在变量扩展之前,因此您需要执行其他操作。

{35..40}

{${MinInicial}..${MinFinal}}
{$MinRange}
 不同,所以说“当我在 shell 中执行命令行时,它工作正常”是错误的。我认为这三个表达式中只有第一个可以满足您的要求。首先尝试在 shell 中使用简单命令获取您想要的范围,例如
a=3; b=5; printf '%s\n' {$a..$b}
(这是行不通的,只是演示尝试使用变量与硬编码值(如范围内的
printf '%s\n' {3..5}
)的问题)。

© www.soinside.com 2019 - 2024. All rights reserved.