Если вы хотите как можно ближе подойти к синтаксису выражения, попробуйте функцию range
из bash-трюков range.bash
.
Для Например, все следующие будут делать то же самое, что и echo {1..10}
:
source range.bash
one=1
ten=10
range {$one..$ten}
range $one $ten
range {1..$ten}
range {1..10}
Он пытается поддерживать собственный синтаксис bash с максимально возможным количеством «gotchas»: поддерживаются не только переменные, но часто нежелательное поведение недопустимых диапазонов, предоставляемых как строки (например, for i in {1..a}; do echo $i; done
), также предотвращается.
Другие ответы будут работать в большинстве случаев, но все они имеют по крайней мере одно из следующих Недостатки:
seq
представляет собой двоичный файл, который должен быть установлен для использования, должен быть загружен bash и должен содержать ожидаемую программу, чтобы он работал в этом случае. {a..z}
; расширение скобки будет. Вопрос был о диапазонах номеров , хотя это так. {1..10}
, поэтому программы, которые используют оба варианта, могут быть немного труднее читать. $END
не является допустимым диапазоном «bookend» для другая сторона диапазона. Если END=a
, например, ошибка не будет выполнена, и будет передано дословное значение {1..a}
. Это также поведение Bash по умолчанию - это просто неожиданно. Отказ от ответственности: я являюсь автором связанного кода.