我的脚本:
#!/bin/sh
for i in {1..3}
do
cp dummy.dat dummy/dummy.`printf "%04d%s_shp" ${i}`
done
和
error: printf: 9: {1..3}: expected numeric value
如果我输入:
for i in 0 2 3
脚本正在运行。
我的脚本在顶部有什么问题?或者任何人的解决方案?
您/bin/sh
不支持{1..3}
哪个是 bash 扩展。您可以:
#!/bin/bash
确保脚本始终使用 bash 运行。$(seq 1 3)
它是符合 POSIX 标准的替代品,据说可以与所有外壳一起使用。printf "%04d%s_shp" ${i}
^ ^
1 2
printf
期望两个值。
它需要一个数字的%04d
方式(将给出 4 个空格并用前导零填充),%s
它期望获得一个字符串值的方式。您只提供一个值i
, 到printf
只是一个猜测,但你的意思可能只是:
printf "%04d_shp" ${i}
即,没有s%
?
文字{1..3}
不是数字。它里面有数字,但外壳不会(必然)将其解释为 a 中的范围for
;您必须将其完整地写出来(或使用while
循环和一些表达式计算)。