У меня есть тривиальный цикл цикла в скрипте bash, который не работает, и я не вижу, что не так.Расширение байт и расширение функциональных параметров
#!/bin/bash
function deleteOut {
for index in {0..$1}
do
echo "/bin/rm -rf ./OUT/Message_${index}.log"
/bin/rm -rf ./OUT/Message_${index}.log
done
}
и назвал его помощью
deleteOut 5
Я ожидал, что цикл, как
/bin/rm -rf ./OUT/Message_0.log
/bin/rm -rf ./OUT/Message_1.log
/bin/rm -rf ./OUT/Message_2.log
/bin/rm -rf ./OUT/Message_3.log
/bin/rm -rf ./OUT/Message_4.log
/bin/rm -rf ./OUT/Message_5.log
Вместо этого я получил
/bin/rm -rf ./OUT/Message_{0..5}.log
Я решил эту проблему, делая что-то вроде этого вместо
find ./OUT -name "Message_*.log" | xargs /bin/rm
, но это не главное. Почему мой первый подход не сработал?
Вторая команда была бы правильной, если index = 0. Первая команда не используется, потому что диапазон был 0 .. $ 1, а seq (насколько мне известно) начинаются с 1. Но на самом деле вы отвечаете, как перебирать файлы, тогда как мой вопрос касается расширения параметра в диапазоне. Ответ от «sehe» правильный: «Расширение скобки происходит до изменения переменной» (я этого не знал). В любом случае, спасибо за ваш ответ. – Luixv
Ссылка объясняет проблему расширения и ссылки на дополнительную информацию. – l0b0