我必须从文件列表中打印指定文件的内容,如下所示。开头文件名中的日期是可更改的,而部分" _lol_lol.txt"是康斯坦斯。
ls
2015-01-03_lol_lol.txt
2015-01-24_lol_lol.txt
...
2015-10-23_lol_lol.txt
2015-10-24_lol_lol.txt
...
2015-11-14_lol_lol.txt
2015-11-15_lol_lol.txt
2015-11-16_lol_lol.txt
2015-11-17_lol_lol.txt
2015-11-18_lol_lol.txt
2015-11-19_lol_lol.txt
2015-11-20_lol_lol.txt
2015-11-21_lol_lol.txt
2015-11-22_lol_lol.txt
2015-11-23_lol_lol.txt
2015-11-24_lol_lol.txt
2015-11-25_lol_lol.txt
为了案例的目的,每个文件都包含一些数据:
cat 2015-01-03_lol_lol.txt
2015-01-03
cat 2015-01-24_lol_lol.txt
2015-01-24
...
cat 2015-10-23_lol_lol.txt
2015-10-23
cat 2015-10-24_lol_lol.txt
2015-10-24
...
cat 2015-11-14_lol_lol.txt
2015-11-14
cat 2015-11-15_lol_lol.txt
2015-11-15
...
cat 2015-11-25_lol_lol.txt
2015-11-25
我想从粉丝"来自"打印fles的内容。 "至"和#34;来自"和"到"是变量的(由用户定义,具体取决于需求):
2015-11-15_lol_lol.txt
2015-11-16_lol_lol.txt
2015-11-17_lol_lol.txt
预计结果:
2015-11-15
2015-11-16
2015-11-17
但是当我使用命令时:
for i in {"2015-11-15".."2015-11-17"};do echo $i_lol_lol.txt ;done
Bash返回:
{2015-11-15..2015-11-17}.txt
因为像@karoshi一样,如果我使用" - "整个表达式被识别为字符串。
我试过了:
y1=2015;
y2=2015;
m1=11;
m2=11;
d=15
z=17
#for i in {${y1}..${y2}}; do
for j in {${m1}..${m2}}; do
for k in {${d1}..${d2}}; do
cat ${i}-${j}-${k}_lol_lol.txt
done
done
done`
但结果是相似的。
你可以帮忙吗?答案 0 :(得分:2)
如果您希望循环显示指定的月份和日期,则可以使用{..}
语法。为什么?因为即使在检查变量之前也会发生这种扩展,因此不能在那里存储任何变量。
相反,请使用seq
,它确实允许变量。
$ a=12
$ b=23
$ for i in $(seq $a $b); do echo "$i"; done
12
13
...
21
22
23
在这种情况下,您可能想说:
$min_month
和$max_month
$min_day
和$max_day
然后执行双循环:
for month in $(seq "$min_month" "$max_month");
do
for day in $(seq "$min_day""$max_day");
do
cat 2015-${month}-${day}_lol_lol.txt
done
done
答案 1 :(得分:1)
嗯,你可以试试
for i in {15..17};do echo 2015-11-${i}_lol_lol.txt ;done
完成不适用于' - '包括在内,因为bash不会将其识别为整数。