LINUX.ORG.RU

Разное поведение bash for.


0

1

Собственно пишу скрипт, в котором есть обработка числа некоторых элементов в файле, число получаю с помощью

num=`cat file | grep "$expr" | wc -l`

И вот заметил странное поведение, хотя может так и задумано:

Если писать цикл так:

for i in {1..$num}
do
 echo $i;
done

То вывод будет:
{1..<знач_num>}

Еесли писать так:

for ((i=1; i<=$num; i++))
do
 echo $;
done

То вывод будет правильный:
1
2
3
4
...

Вот пример, проверьте:


for i in {1.."3"} 
do 
 echo $i ; 
done

for ((i=1; i<="3"; i++)) 
do 
 echo $i ; 
done

В первом случае не работает приведение типов, хотя возможно так специально сделано. Может можно как-то по-другому записывать, просто уже привык к первому варианту?

★★★★★

Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от x3al

Мне нужно подсчитать число определённых элементов и на основании этого делать определённое число прогонов цикла, мне не нужно обрабатывать каждую строку файла, на основании числа этих элементов я делаю другой расчёт.

kostik87 ★★★★★
() автор топика
Ответ на: комментарий от kostik87

>мне не нужно обрабатывать каждую строку файла

а зачем обязательно обрабатывать? while read вполне себе может использоваться для организации цикла

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Мне не нужно обрабатывать каждую строку, мне нужно просто посчитать число вхождений, я файл, в котором считаю число вхождений дальше не трогаю. После подсчёта числа вхождение что вашим способом, что моим число вхождений возвращается как строка и поэтому такой способ указания интервала {1..$a}, где в лежит число вхождений не подходит, хотя странно, если указывать интервал с помощью синтаксиса СИ то приведение типов срабатывает, хотя ладно, буду писать СИ синтаксисом в for.

kostik87 ★★★★★
() автор топика
Ответ на: комментарий от lazyklimm

Посмотрю, но кардинально менять шел из-за одной проблемы не хочется, пока помучаюсь.

kostik87 ★★★★★
() автор топика
Ответ на: комментарий от sdio

Большое спасибо, да работают два способа.

kostik87 ★★★★★
() автор топика
Ответ на: комментарий от ciiccii

И вас спасибо, я об eval и seq не знал, бывает.

kostik87 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.