シェルの中かっこ拡張はどのように機能しますか?

シェルの中かっこ拡張はどのように機能しますか?

このコマンドはをecho {1..3}-{1,2}印刷します1-1 1-2 2-1 2-2 3-1 3-2。中かっこがどのように使用されるかを理解します。しかし、実際には何ですか?はいそれらを?

sh/の使命は、bashそれらを解析/拡張し、拡張バージョンをランチャーに渡すことですか?

それでは、他に何ができ、仕様はありますか?

しかも名前もありますか?

ls *.txtインテリアも同様の方法で処理されますか?

n回繰り返される引数を実装する方法はありますか?例えば(もちろん動作しません。単なる概念です):cat test.pdf{*3}cat test.pdf test.pdf test.pdf

ベストアンサー1

彼らが電話する支柱の拡張

bashこれはzsh、およびによって実行されるいくつかの拡張子のうちの1つでありksh、そのうちのファイル名拡張子*.txtは別のものです。中かっこ拡張は POSIX 標準に含まれないため、移植性はありません。この内容は以下から読むことができます。バッシュマニュアル

@Arrowの提案に従って中括弧拡張のみを使用するには、cat test.pdf test.pdf test.pdf次の「ハッキング」を使用する必要があります。

#cat test.pdf test.pdf
cat test.pdf{,}

#cat test.pdf test.pdf test.pdf
cat test.pdf{,,}

#cat test.pdf test.pdf test.pdf test.pdf
cat test.pdf{,,,}

いくつかの一般的な用途:

for index in {1..10}; do
   echo "$index"
done

touch test_file_{a..e}.txt

または文字列を10回印刷する別の「ハッキング」:

printf -- "mystring\n%0.s" {1..10}

支柱の拡張がbash完了しました。今後パラメータ拡張なので、よく犯される間違いは次のとおりです。

num=10
for index in {1..$num}; do
   echo "$index"
done

ksh93しかし、シェルはこの問題を処理できます)

おすすめ記事