Glob / раскол
Я сначала возьму шар / сплит. @ Ответ Стефана, на который вы ссылаетесь, использует эти термины в общем смысле. Это не настоящие команды или что-то в этом роде, а просто псевдо-операции.
Это split("$test")
разделит содержимое «$ 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
кавычек, мы говорили оболочке идти дальше, разбивать эти аргументы и затем их выводить.
Когда оно было заключено в кавычки, мы фактически отключали эту функцию тем, что когда-либо было изменено в двойных кавычках.
пример
Вот несколько дополнительных примеров срыва и расщепления.
шар / расщепление происходит автоматически
$ 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
Glob / расщепление отключено через двойные кавычки
$ 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}