私のスクリプト:
#!/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
スクリプトは機能しています。
上部のスクリプトの何が問題になっていますか?または誰かが解決策ですか?
bash 拡張機能を/bin/sh
サポートしていません。{1..3}
次のいずれかを実行できます。
#!/bin/bash
スクリプトが常に bash で実行されるようにするために使用します。$(seq 1 3)
おそらくすべてのシェルで動作するPOSIX準拠の代替品であるこれを使用してください。printf "%04d%s_shp" ${i}
^ ^
1 2
printf
2つの値が必要です。
数値(4つの%04d
スペースが与えられ、先行ゼロが埋め込まれる)が必要である%s
ことを意味し、文字列値を取得することを期待していることを意味します。に1つの値のみを指定しi
ますprintf
推測に過ぎませんが、おそらく次のことを意味していましたか?
printf "%04d_shp" ${i}
つまり、s%
?なし
リテラル{1..3}
は数値ではありません。数値が含まれていますが、シェルは(必然的に)それをfor
;の範囲として解釈しません。あなたはそれを完全に書き出す必要があります(またはwhile
ループといくつかの式の計算を使用します)。