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

bash 拡張機能を/bin/shサポートしていません。{1..3}次のいずれかを実行できます。

  1. #!/bin/bashスクリプトが常に bash で実行されるようにするために使用します。
  2. $(seq 1 3)おそらくすべてのシェルで動作するPOSIX準拠の代替品であるこれを使用してください。
于 2012-06-01T11:30:24.423 に答える
2
printf "%04d%s_shp" ${i}
        ^   ^
        1   2

printf2つの値が必要です。

数値(4つの%04dスペースが与えられ、先行ゼロが埋め込まれる)が必要である%sことを意味し、文字列値を取得することを期待していることを意味します。に1つの値のみを指定しiますprintf

推測に過ぎませんが、おそらく次のことを意味していましたか?

printf "%04d_shp" ${i}

つまり、s%?なし

于 2012-06-01T11:00:07.167 に答える
0

リテラル{1..3}は数値ではありません。数値が含まれていますが、シェルは(必然的に)それをfor;の範囲として解釈しません。あなたはそれを完全に書き出す必要があります(またはwhileループといくつかの式の計算を使用します)。

于 2012-06-01T11:01:43.000 に答える