For 循环在终端中工作但在 shell 脚本中不工作

For loop working in terminal but not in shell script

我正在尝试重命名文件。

$ls
1.jpg   12.jpg  15.jpg  18.jpg  3.png  6.jpg  9.png
10.jpg  13.jpg  16.jpg  19.jpg  4.jpg  7.png
11.jpg  14.jpg  17.jpg  2.jpg   5.jpg  8.jpg

文件 {1..9}.*1.jpg01.jpg,不考虑扩展名。 我在终端中尝试了以下 for 循环,它运行良好。

$for i in {1..9}.*;do mv "$i" 0"$i";done

当我在 shell 脚本中编写相同内容时,它不起作用。

#!/bin/sh
for i in {1..9}.*;do mv "$i" 0"$i";done

报错如下

mv cannot stat '{1..9}.*':No such file or directory

我认为 posix shell 不支持 {1..9}.* 语法。

问:在 posix 中这相当于什么?

-谢谢。

您可以使用通配符模式 [1-9].*

#!/bin/sh
for i in [1-9].*
do 
    mv "$i" 0"$i"
done