0

我有以下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 不起作用”。以及如何做到这一点?

提前致谢。林

4

1 回答 1

1

序列扩展只发生在文字数字上。变量扩展发生在序列扩展之后:

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

大括号扩展在任何其他扩展之前执行,并且任何其他扩展的特殊字符都保留在结果中。它是严格的文本。Bash 不对扩展的上下文或大括号之间的文本应用任何句法解释。

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

m=`eval echo {$j..$k}.jpg`
于 2013-10-16T04:29:00.973 回答