Я хочу выполнить определенные действия над группой файлов с лексикографическим названием (01-09 до 10). Мне нужно использовать довольно старую версию FreeBSD (7.3), поэтому я не могу использовать yummies вроде echo {01..30}
или seq -w 1 30
.Для цикла с диапазоном на основе аргументов
Единственным рабочим решением, которое я нашел, является printf "%02d " {1..30}
. Однако я не могу понять, почему я не могу использовать $1
и $2
вместо 1
и 30
. Когда я запускаю свой сценарий (bash ~/myscript.sh 1 30
) printf говорит {1..30}: invalid number
AFAIK, переменные в bash являются безликими, так как не может printf принять целочисленный аргумент как целое число?
Это не проблема с тем, что printf вообще не примет. Это проблема, потому что разложение параметров еще не произошло, когда происходит расширение фигурной скобки. –
Это связано с BashPitfalls # 33: http://mywiki.wooledge.org/BashPitfalls#for_i_in_.7B1...24n.7D - ссылки могут быть полезны для лучшего понимания того, что происходит при выполнении команды , –
(кстати, это возможно для того, чтобы обозначить переменную как содержащую целое число, в то время как есть очень мало оснований для этого, на самом деле существует _is_ некоторое количество хранимых данных типа). –