Linux 在bash中扩展{..}内的变量?

Linux 在bash中扩展{..}内的变量?,linux,bash,list,variables,Linux,Bash,List,Variables,我有以下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}

我有以下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不起作用”。 如何让它起作用

提前谢谢。
lin

序列扩展只对文字数字进行。变量展开发生在序列展开之后:

序列表达式的形式为{x..y},其中x和y为 整数或单个字符。提供整数时,表达式 扩展到x和y之间的每个数字(包括x和y)。当字符 如果提供,表达式将按字典顺序扩展到每个字符 在x和y之间,包括x和y。请注意,x和y的类型必须相同

大括号展开在任何其他展开之前执行,以及任何字符 结果中保留了其他扩展的特殊属性。这是严格的文本。 Bash不对扩展的上下文应用任何语法解释 或者大括号之间的文本

对于您的情况,您可以使用eval:

m=`eval echo {$j..$k}.jpg`

使用带有可变范围的/usr/bin/seq。我已经使用seq获得了列表
j=00000001;k=00000025;m=$(seq-w$j$k);echo$m
但是除了使用循环之外,我是否有办法在列表中的每个元素后面附加.jpg。谢谢,这就清楚了。现在我需要考虑其他方法来实现我所需要的。我的要求是从一大组jpg文件中处理一小部分连续编号的jpg文件,并在每次处理后增加子集。您可以使用eval:m=
eval echo{$j..$k}.jpg
非常感谢。效果很好。我在我的bash中找不到
man eval
。但是命令就在那里,它起了作用。@xenoxen因为它是shell内置的,所以你应该运行
help eval
或搜索
man bash
以查找
eval