glob / split
Vou pegar o glob / split primeiro. A resposta de @ Stephane à qual você se vinculou é usar esses termos em um sentido geral. Eles não são comandos reais ou algo parecido, apenas pseudo-operações.
O split("$test")
iria dividir o conteúdo de "$ test"-se em um "array" de elementos.
Em glob(...)
seguida, tomaríamos o cuidado de expandir qualquer um desses elementos que contenham caracteres globbing do shell, como *
intervalos [1-2]
.
Exemplo
Digamos que nossa string $test
é a seguinte.
$ test="afile[1-2] afile[3-5]"
Também vamos dizer que temos um diretório com alguns arquivos nele.
$ ls -1
afile1
afile2
afile3
afile4
afile5
Agora, se tentarmos repeti-lo sem aspas, você deve notar que nossa string foi dividida em espaços e, em seguida, quaisquer caracteres brilhantes foram expandidos.
$ echo $test
afile1 afile2 afile3 afile4 afile5
No entanto, se citássemos a variável quando a passássemos como argumento echo
, obteríamos a string literal original.
$ echo "$test"
afile[1-2] afile[3-5]
expansão variável
O termo expansão variável destina-se a cobrir a operação básica que o shell está executando como parte de suas operações básicas. O shell é responsável por analisar a entrada e, em seguida, executá-la assim que for considerada sintaticamente correta.
No nosso exemplo anterior. Quando a variável $test
foi apresentada entre echo
aspas, estávamos dizendo ao shell para seguir em frente e dividir esses argumentos e depois enviá-los.
Quando foi citado, estávamos essencialmente desativando esse recurso com qualquer variável que envolvemos com aspas duplas.
Exemplo
Aqui estão alguns exemplos adicionais de globbing e split.
glob / splitting acontece automaticamente
$ 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 / splitting desativado por aspas duplas
$ 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}