このコマンドはを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
しかし、シェルはこの問題を処理できます)
答え2
ペサの答え答えは質問の重要な側面をカバーしています。いくつか追加したいことがあります。
アスタリスクはls *.txt
シェルによって処理されるため、シェル組み込み機能で変更できるシェルオプションによって制御されます。この場合、を実行してアスタリスク拡張を無効にし、を実行してset -f
再度有効にすることができますset +f
。
もう一つのことは、スクリプトを移植可能にしたい人は誰でもPOSIX標準をチェックする必要があるということです。たとえば、{1..9..2}
4に拡張されますが、1 3 5 7 9
サブbash
バージョンbash
やsh
。