глобус / спліт
Я спершу візьму глобус / спліт. @ Відповідь Стефана, з якою ви пов’язані, використовує ці терміни в загальному розумінні. Вони не є фактичними командами чи чимось подібним, просто псевдо-операціями.
Це 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
глобул / розділення відключено за допомогою подвійного цитування
$ 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}