shell生产字符串序列

内容目录

需求

批量删除数据库

正确写法

for i in $(seq -w 1 010); do printf "drop database test%03ddata;\n" "$((10#$i))"; done

生成从001到100的数字序列,其中-w选项用于指定宽度,确保生成的数字都是三位数,有前导零。
printf 会自动解析以 0 开头的数字,将其视为八进制数。为了解决这个问题,我们可以在 printf 命令中指定输出的格式。
$((10#$i)) 的作用是将 $i 视为十进制数。这样,我们就可以避免八进制数的问题。

错误写法

for i in $(seq -w 1 010); do printf "drop database test%03ddata;\n" "$i"; done

报错 五肖八进制数

drop database test001data;
drop database test002data;
drop database test003data;
drop database test004data;
drop database test005data;
drop database test006data;
drop database test007data;
-bash: printf: 008: invalid octal number
drop database test000data;
-bash: printf: 009: invalid octal number
drop database test000data;
drop database test008data;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注