単一変数の複数のシーケンス

単一変数の複数のシーケンス

単一変数に入力する必要がある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、、、、、、、、)。kshrczshbashfishyash

ではzsh、次のコマンドを使用してコマンドに依存せずにこれを実行bashできます。yash -o braceexpandseq

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 一つseqvalueは、末尾の改行が削除されたコマンドの出力です。

次のコマンドを使用して、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)"

これは、最初のコマンド置換によって削除された改行を補償するために、それらの間に改行を追加します。

関連情報