glob / split
Je prends d'abord le glob / split. @ La réponse de Stéphane à laquelle vous avez lié est d'utiliser ces termes dans un sens général. Ce ne sont pas des commandes réelles ou quelque chose comme ça, juste des pseudo-opérations.
Le split("$test")
diviserait le contenu de "$ test" en un "tableau" d'éléments.
Le glob(...)
prendrait alors soin de développer n'importe lequel de ces éléments contenant des caractères de globalisation du shell tels que *
ou des plages [1-2]
.
Exemple
Disons que notre chaîne $test
est la suivante.
$ test="afile[1-2] afile[3-5]"
Disons également que nous avons un répertoire contenant quelques fichiers.
$ ls -1
afile1
afile2
afile3
afile4
afile5
Maintenant, si nous essayons de l'écho sans guillemets, vous devriez remarquer que notre chaîne a été divisée en espaces, puis tous les caractères globulaires ont été développés.
$ echo $test
afile1 afile2 afile3 afile4 afile5
Cependant, si nous devions citer la variable lorsque nous la transmettions comme argument, echo
nous obtiendrions la chaîne littérale d'origine.
$ echo "$test"
afile[1-2] afile[3-5]
expansion variable
Le terme expansion variable est destiné à couvrir l'opération de base que le shell effectue dans le cadre de ses opérations de base. Le shell est responsable de l'analyse de l'entrée, puis de l'exécution de cette entrée une fois qu'elle est jugée syntaxiquement correcte.
Dans notre exemple précédent. Lorsque la variable a $test
été présentée comme echo
non citée, nous disions au shell d'aller de l'avant et de diviser ces arguments puis de les globaliser.
Quand il a été cité, nous désactivions essentiellement cette fonctionnalité avec les variables que nous avons enveloppées de guillemets doubles.
Exemple
Voici quelques exemples supplémentaires de globbing et de split.
glob / split se produit automatiquement
$ 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 / fractionnement désactivé via des guillemets doubles
$ 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}