несколько последовательностей в одной переменной

У меня есть два диапазона типов, которые мне нужно получить в одной переменной. Как я могу это сделать?

Например: у меня есть один диапазон от 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
2
21.06.2020, 19:06
2 ответа

Вы можете включить несколько команд в подстановку команд($(...)). Итак, в вашем случае

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
3
18.03.2021, 23:25

Если вы хотите хранить несколько значений в переменной, вам понадобится оболочка с поддержкой массивов, например 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)"

Здесь добавлен символ новой строки между ними, чтобы компенсировать тот, который был удален при первой подстановке команды.

2
18.03.2021, 23:25

Теги

Похожие вопросы