У меня есть два диапазона типов, которые мне нужно получить в одной переменной. Как я могу это сделать?
Например: у меня есть один диапазон от bs0401 до bs0405 (bs0401,bs0402,bs0403...) и другой диапазон, например от bn0201 до bn0205(bn0201,bn0202,bn0203..), и мне нужны оба эти расширение под одной переменной.
Я могу сделать для одной последовательности, например
h=$(seq -f "bs%02g" 0401 1 0405)
, но не знаю, как включить несколько последовательностей, назначенных в одну переменную, чтобы эхо $h было задано как
bs0401
bs0402
bs0403
bs0404
bs0405
bn0201
bn0202
bn0203
bn0204
bn0205
Вы можете включить несколько команд в подстановку команд($(...)
). Итак, в вашем случае
h=$(seq -f 'bs%04g' 0401 1 0405; seq -f 'bn%04g' 0201 1 0205)
дает вам
$ echo $h
bs0401 bs0402 bs0403 bs0404 bs0405 bn0201 bn0202 bn0203 bn0204 bn0205
Если вы хотите хранить несколько значений в переменной, вам понадобится оболочка с поддержкой массивов, например csh
, ksh
, rc
, zsh
, bash
, fish
, yash
. ].
В zsh
, bash
, yash -o braceexpand
вы могли сделать это, не полагаясь на команду seq
, здесь с помощью:
list=(bs{0401..0405} bn{0201..0205})
Или вksh93
:
list=(bs{401..405%04d} bn{201..205%04d})
Хотя в данном конкретном случае его можно было бы сократить до:
list=({bs04,bn02}0{1..5})
Что будет работать во всех 4-х оболочках.
С:
string=$(seq -f bs%04g 401 405)
На самом деле вы сохраняете в$string
одно значение , которое является выводом команды seq
с удаленными завершающими символами новой строки.
Вы можете сохранить объединенный вывод двух команд seq
с помощью:
string=$(seq -f bs%04g 401 405; seq -f bn%04g 201 205)
или:
string="$(seq -f bs%04g 401 405)
$(seq -f bn%04g 201 205)"
Здесь добавлен символ новой строки между ними, чтобы компенсировать тот, который был удален при первой подстановке команды.