bash [内部]中括弧拡張反復回数/変数にアクセス

bash [内部]中括弧拡張反復回数/変数にアクセス

質問:

現在処理中のbashの繰り返し回数にアクセスできますか?

疑似命令

mv {1..5}.something.{1..5} $x1.$x2.something
  • 注:これは実際のサンプルではなく論理表現です。

擬似出力

mv 1.something.1 1.1.something
mv 1.something.2 1.2.something
...
mv n.something.m n.m.something
  • ここで、n と m はそれぞれ中括弧拡張反復です。

説明する

私は次のようなループに慣れています。

for x in {1..10}; do echo -n "$x "; done

ご覧のとおり、bashは繰り返しを$ xに設定します。これが可能かどうか、そして使用する変数を定義していない場合は、bashが使用する変数にどのようにアクセスできるかを知りたいです。 bashが与えられると支柱の拡張繰り返す変数がない場合は、どういうわけか[内部的に]繰り返す必要があります。スクリプトの実行中にこの変数にアクセスできるようにしたいです。

参加してくれた皆さんに感謝します#強打

ベストアンサー1

支柱の拡張がどのように機能するか誤解しています。上記のDennis Williamsonのコメントをもう一度お読みください。

mv foo.{1,2,3} bar私が書いたとき、私は次のように入力したように、シェルが実際にコマンドを何度も呼び出したと思いますか?

mv foo.1 bar
mv foo.2 bar
mv foo.3 bar

これが本当なら、あなたの質問は意味があります。シェルは複数のコマンドを実行するため、リストを維持する必要があります。

しかし、それは本当ではありません。ステント拡張拡張議論次に、生成されたコマンドラインを呼び出します。一度。したがって、上記の例では、シェルは引数に中foo.{1,2,3}括弧拡張が含まれていることを確認し、その引数を3つの引数に拡張しますfoo.1 foo.2 foo.3。次に、中括弧引数の代わりにコマンドラインに拡張を挿入し、コマンドラインの解析を続けます。完了すると、シェルは次のコマンドを実行します。

mv foo.1 foo.2 foo.3 bar

したがって、シェルが対応する中括弧引数を拡張してもリストを保持できますが、中括弧拡張が完全に完了し、拡張に関するすべての情報が使用されて忘れられるため、他の引数拡張ではそのリストにアクセスできません。他のパラメータを解析するとき。

とにかく、そのようなパラメータが役に立つ唯一の方法は、シェルが複数のコマンドを実行する場合ですが、これは真ではありません。複数のコマンドを実行するには、実際のループを使用する必要があります。中かっこ拡張はそうしません。

これに関しては、$_これはループ変数の代わりに使用できるPerl構成なので、(xループの例のように)実際に中かっこ拡張とは関係ありません。

おすすめ記事