グロブ/スプリット
まず、glob / splitを使用します。リンクした@Stephaneの回答は、一般的な意味でこれらの用語を使用しています。それらは実際のコマンドやそのようなものではなく、単なる擬似操作です。
split("$test")
要素の「アレイ」に「$テスト」までの内容を分割します。
次にglob(...)
、*
やなどのシェルグロビング文字を含むこれらの要素を展開するように注意します[1-2]
。
例
文字列$test
は次のようになります。
$ test="afile[1-2] afile[3-5]"
また、いくつかのファイルを含むディレクトリがあるとします。
$ ls -1
afile1
afile2
afile3
afile4
afile5
引用符なしでそれをエコーしようとすると、文字列がスペースで分割され、グロビング文字が展開されていることに気付くはずです。
$ echo $test
afile1 afile2 afile3 afile4 afile5
ただし、変数を引数として渡したときに変数を引用する場合はecho
、元のリテラル文字列を取得します。
$ echo "$test"
afile[1-2] afile[3-5]
変数展開
変数展開という用語は、シェルがその基本操作の一部として実行している基本操作をカバーすることを意図しています。シェルは、入力を解析し、構文的に正しいと判断されたらこの入力を実行します。
前の例では。変数$test
がecho
引用符なしで提示されたとき、シェルに先に進み、それらの引数を分割してからグロブするように指示していました。
引用されたとき、二重引用符でラップされた変数でその機能を本質的に無効にしました。
例
以下に、グロビングと分割のいくつかの追加例を示します。
glob / splittingは自動的に発生します
$ echo file{1..3}
file1 file2 file3
$ echo file{1..3} dir{a..b}
file1 file2 file3 dira dirb
$ echo dir{z..w} file{A..D}
dirz diry dirx dirw fileA fileB fileC fileD
$ echo dir{z..w} file{A..B} fileC
dirz diry dirx dirw fileA fileB fileC
二重引用符によるグロブ/分割は無効化
$ echo "dir{z..w} file{A..B} fileC"
dir{z..w} file{A..B} fileC
$ echo "dir{z..w} file{A..B}"
dir{z..w} file{A..B}