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