История изменений
Исправление vodz, (текущая версия) :
В таком виде не прокатит. у ТС 01,02... а не 1,2...
А это странное условие. Сегодня 01 02 ..., а завтра 001, 002 ...
Вот вам решение, которое считывает по маске [0-9]*.* все файлы, а потом проверяет аргументы, потому работает с любым количеством первых нулей или даже если их нет. Заодно xaizek будет урок, как обойтись без eval и чтения из сопроцесса. (Афигеть, ну как это может в одном месте сочетать, специально чтоли пишут как можно тормознее?)
#!/bin/bash
function tst_range()
{
local a1=$1 start=${!2} end
if [ -z "${start##*-*}" ]; then
end=${start##*-}
start=${start%%-*}
else
end=$start
fi
while [ ${a1#0} != $a1 ]; do
a1=${a1#0}
done
return $(($a1 < start || $a1 > end))
}
for f in [0-9]*.* ; do
for arg; do
tst_range "${f%%.*}" arg && echo "$f"
done
done
Без внутреннего цикла с tst можно обойтись, перенеся $@ в функцию tst, но откровенно лень.
Исходная версия vodz, :
В таком виде не прокатит. у ТС 01,02... а не 1,2...
А это странное условие. Сегодня 01 02 ..., а завтра 001, 002 ...
Вот вам решение, которое считывает по маске [0-9]*.* все файлы, а потом проверяет аргументы, потому работает с любым количеством первых нулей или даже если их нет. Заодно xaizek будет урок, как обойтись без eval и чтения из сопроцесса. (Афигеть, ну как это может в одном месте сочетать, специально чтоли пишут как можно тормознее?)
#!/bin/bash
function tst_range()
{
local a1=$1 start=${!2} end
if [ -z "${start##*-*}" ]; then
end=${start##*-}
start=${start%%-*}
else
end=$start
fi
while [ ${a1#0} != $a1 ]; do
a1=${a1#0}
done
return $(($a1 < start || $a1 > end))
}
for f in [0-9]*.* ; do
for arg; do
tst_range "${f%%.*}" arg && echo "$f"
done
done