@oleww05

Как выполнить команду из переменной?

Почему переменная не преобразуется в команду, но при ручном вводе отлично работает?
как сделать так, чтобы она читалась и выполнилась как команда?
Так не работает
#!/bin/bash
z1={0..38}; z2={39..76}; z3={77..114}; z4={115..152}; z5={153..190} #...
for n in $z{1..99}; do
wget http://domain.com/path/$n.jpeg -P /untitled/1/
done

Эсли прописать вручную - работает, но это не подходит:
#!/bin/bash
for i in {0..38}; do; wget http://domain.com/path/$i.jpeg -P /untitled/1/ ; done
ИЛИ
#!/bin/bash
wget http://domain.com/path/{0..38}.jpeg
  • Вопрос задан
  • 226 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
z1={0..38}; z2={39..76}; z3={77..114}; z4={115..152}; z5={153..190} #...


Как вы предполагаете, что тут должно происходить?
В bash присваивание должно идти variable=value, без пробелов.
А в увас происходит
z1=0 1 2 3 4 5...

другими словами
z1=0 и куча непонятно чего.

Замените это все на

for n in {0..38} {39..76} {77..114} {115..152} {153..190}
do
echo $n
done

Правда не забывайте, что длина строки ограничена, в зависимости от дистрибутива, это может быть по умолчанию и 4 кб и 1 кб.
Ответ написан
@xibir
z1=({0..38}); z2=({39..76}); z3=({77..114}); z4=({115..152}); z5=({153..190})
for((i = 1; i < 5; ++i)); do
   declare -n a=z$i
   for n in ${a[@]}; do
      wget http://domain.com/path/$n.jpeg
   done
done
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
man eval

UPD: Перебор можно сделать через арифметический инкремент. Тупее, но работать точно будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы