単一変数に入力する必要がある2つのタイプの範囲があります。どうすればいいですか?
たとえば、bs0401からbs0405(bs0401、bs0402、bs0403...)までの範囲、およびbn0201からbn0205(bn0201、bn0202、bn0203..)までの異なる範囲があります。します。
単一のシーケンスでこれを行うことができます。
h=$(seq -f "bs%02g" 0401 1 0405)
しかし、echo $ hに次のような結果を与えるために単一の変数に割り当てられた複数のシーケンスを含める方法がわかりません。
bs0401
bs0402
bs0403
bs0404
bs0405
bn0201
bn0202
bn0203
bn0204
bn0205
答え1
コマンド置換()に$(...)
複数のコマンドを含めることができます。だからあなたの場合
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
答え2
1つの変数に複数の値を格納するには、配列をサポートするシェルが必要です(たとえば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
valueは、末尾の改行が削除されたコマンドの出力です。
次のコマンドを使用して、2つのコマンドのリンクされた出力を保存できます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)"
これは、最初のコマンド置換によって削除された改行を補償するために、それらの間に改行を追加します。