2016-10-31 6 views
0

На Kubuntu 15.10bash - расширение расширений не расширяется?

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)

+0

Я рекомендую использовать 'нити = $ (эхо {1} {10..60..10})' – hek2mgl

+0

@ hek2mg Этот префикс '' 10,20, .., 60'' с '' {1} '' (т.е. '' {1} 10, {1} 20, .., {1} 60''. Это также является причиной того, что это не дублирующий вопрос. – User1291

+0

'{1}' просто не требуется, а зачем его использовать? – hek2mgl

ответ

3

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

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

Расширение скобки выполняется до того расширения переменного, так что вы не можете расширить фигурные скобки, только со ссылкой на переменный:

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

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

Пример:

tCount=0 
for t in {1,{10..60..10}}; do 
    echo "t=$t tCount=$tCount" 
    ((tCount++)) 
done 
+0

Спасибо, что вы не можете использовать '' eval''? – User1291

+0

Вместо 'eval' следует использовать подстановку команд : 'threads = $ (echo {10..60..10})' – hek2mgl

+0

@ hek2mgl или в этом случае '' threads = ({1, {10..60..10}}). И снова, пожалуйста, уточните * почему * это "shou ld ". – User1291

Смежные вопросы