Bash - расширение скобки не расширяется?

На Кубунту 15.10

echo $BASH_VERSION
4.3.42(1)-release

я попробую

reps=1
threads={1}{10..60..10}

for((r=0;r<$reps;r++))
do
    tCount=0
    for t in $threads
    do
        echo "t=$t, tCount=${tCount}"
        #do something funny with it
        ((tCount++))
    done
done

и он производит одну строку

t={1}{10..60..10}, tCount=0

Как мне заставить это работать?

редактировать

Я жду

t=1, tCount=0
t=10, tCount=1
t=20, tCount=2
t=30, tCount=3
t=40, tCount=4
t=50, tCount=5
t=60, tCount=6

Обновить

Обратите внимание, что threads=({1}{10..60..10})

а потом for t in ${threads[@]}

будет префикс 10..60..10 диапазон со строкой {1}

(т.е. {1}10,{1}20,..,{1}60)

1 ответ

Решение

{1} выражение - это просто строка, поскольку она не соответствует синтаксису расширения фигурных скобок:

Выражение последовательности принимает форму {X..Y[..INCR]}где X и Y являются целыми числами или одиночными символами, а INCR, необязательное приращение, является целым числом.

Раскрытие фигурных скобок выполняется перед раскрытием переменных, поэтому вы не можете развернуть фигурные скобки, просто ссылаясь на переменную:

Порядок расширений: расширение скобок; раскрытие тильды, расширение параметров и переменных, арифметическое расширение и подстановка команд (выполняется слева направо); расщепление слов; и расширение файла.

Напишите ли расширение скобки непосредственно, или используйте eval (обычно не рекомендуется).

Пример:

tCount=0
for t in {1,{10..60..10}}; do
  echo "t=$t tCount=$tCount"
  (( tCount++ ))
done
Другие вопросы по тегам