Подтвердить что ты не робот

Переменные в замене bash seq ({1..10})

Можно ли сделать что-то вроде этого:

start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
4b9b3361

Ответ 1

В bash расширение расширений происходит до расширения переменной, поэтому это невозможно.

Вместо этого используйте арифметический цикл for:

start=1
end=10
for ((i=start; i<=end; i++))
do
   echo "i: $i"
done

OUTPUT

i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10

Ответ 2

Вам следует использовать seq(1). Вы также можете использовать eval:

eval echo {$start..$end}

И вот seq

seq -s' ' $start $end

Ответ 3

Вы должны использовать eval:

eval echo {$start..$end}

Ответ 4

Если у вас нет seq, вы можете захотеть придерживаться простого цикла

for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""

Ответ 5

Вы уверены, что это BASH? ZSH обрабатывает это так, как вы хотите. Это не будет работать в BASH, поскольку расширение скобки происходит до любого другого типа расширения, такого как расширение переменной. Поэтому вам нужно будет использовать альтернативный метод.

Любая конкретная причина, по которой вам нужно объединить скобки и расширение переменной? Возможно, другой подход к вашей проблеме избавит вас от необходимости.

Ответ 6

use -s например: seq -s '' 1 10 выход: 1 2 3 4 5 6 7 8 9 10

Ответ 7

Обычно я просто делаю это:

echo `seq $start $end`