我有以下shell脚本
cat test.sh
j=00000001;
k=00000005;
l=$(echo {00000001..00000005}.jpg);
m=$(echo {$j..$k}.jpg);
ls $l
ls $m
这是输出
./test.sh
00000001.jpg 00000002.jpg 00000003.jpg 00000004.jpg 00000005.jpg
ls: cannot access {00000001..00000005}.jpg: No such file or directory
我的疑问是“为什么ls $ m不能正常工作”。 以及如何使这项工作?
提前致谢。 林
答案 0 :(得分:1)
序列扩展仅适用于文字数字。序列扩展后发生变量扩展:
序列表达式采用{x..y}形式,其中 x和y都是 整数或单个字符。提供整数时,表达式 扩展到x和y之间的每个数字,包括0和y。当人物是 如果提供,表达式按字典顺序扩展到每个字符 在x和y之间,包括在内。请注意,x和y必须属于同一类型。
在任何其他扩展之前执行大括号展开,以及任何字符 结果中保留了特殊的其他扩展。这是严格的文字。 Bash不对扩展的上下文应用任何语法解释 或大括号之间的文字。
对于您的情况,您可以使用eval:
m=`eval echo {$j..$k}.jpg`