2

我的脚本:

#!/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 

脚本正在运行。

我的脚本在顶部有什么问题?或者任何人的解决方案?

4

3 回答 3

3

/bin/sh不支持{1..3}哪个是 bash 扩展。您可以:

  1. 用于#!/bin/bash确保脚本始终使用 bash 运行。
  2. 使用$(seq 1 3)它是符合 POSIX 标准的替代品,据说可以与所有外壳一起使用。
于 2012-06-01T11:30:24.423 回答
2
printf "%04d%s_shp" ${i}
        ^   ^
        1   2

printf期望两个值。

它需要一个数字的%04d方式(将给出 4 个空格并用前导零填充),%s它期望获得一个字符串值的方式。您只提供一个值i, 到printf

只是一个猜测,但你的意思可能只是:

printf "%04d_shp" ${i}

即,没有s%

于 2012-06-01T11:00:07.167 回答
0

文字{1..3}不是数字。它里面有数字,但外壳不会(必然)将其解释为 a 中的范围for;您必须将其完整地写出来(或使用while循环和一些表达式计算)。

于 2012-06-01T11:01:43.000 回答