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

时间:2013-10-16 04:25:36

标签: 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}.jpg: No such file or directory

我的疑问是“为什么ls $ m不能正常工作”。 以及如何使这项工作?

提前致谢。 林

1 个答案:

答案 0 :(得分:1)

序列扩展仅适用于文字数字。序列扩展后发生变量扩展:

  

序列表达式采用{x..y}形式,其中 x和y都是   整数或单个字符。提供整数时,表达式   扩展到x和y之间的每个数字,包括0和y。当人物是   如果提供,表达式按字典顺序扩展到每个字符   在x和y之间,包括在内。请注意,x和y必须属于同一类型。

     

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

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

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