Je suis un nouvel ingénieur qui vient de commencer à écrire bash. Je code ** "Oh, ici des guillemets simples? Double? Est-il nécessaire de l'entourer en premier lieu? Eh bien, peu importe si ça bouge ..." ** Je suis toujours inquiet à ce sujet, alors j'ai décidé de l'organiser à nouveau.
OK avec la reconnaissance suivante. Les détails seront expliqués individuellement plus tard.
Si vous mettez une chaîne entre guillemets simples, chaque caractère de la chaîne perd sa signification spéciale et est interprété comme la signification littérale.
# $HOME est une variable shell spéciale qui définit le répertoire personnel de l'utilisateur exécutant le shell.
$ echo '$HOME' #Entourer de guillemets simples
$HOME #Tel quel$Sortie comme HOME
$ echo "$HOME" #Mettre entre guillemets
/c/Users/guest.name #S'étend à la valeur d'une variable shell
$ echo '*' #Entourer de guillemets simples
* #Tel quel*Est sortie
$ echo * #Ne citez rien
bin doc src #Développé au nom de fichier dans le répertoire actuel
Si vous mettez une chaîne entre guillemets doubles, la plupart des caractères perdent leur signification particulière, tout comme les guillemets simples. Cependant, les significations spéciales de \ $ et de `restent, donc l'expansion des paramètres et la substitution de commandes sont effectuées. ** Il semble préférable de mettre "\ $ variables" et "\ $ (commande de remplacement)" entre guillemets pour éviter tout comportement inattendu. ** **
#Expansion des paramètres
$ var='*** hello world ***' #Avec une série d'espaces*Chaîne contenant
$ echo "$var" #Mettre entre guillemets
*** hello world *** #S'affiche correctement
$ echo $var #Ne pas mettre entre guillemets
bin doc src hello world bin doc src #L'espace est interprété comme un délimiteur et le nom de fichier du répertoire courant est développé avant et après.
#Remplacement de la commande
$ user='$(whoami)' #Entourer de guillemets simples
$ echo "$user"
$(whoami) #Interprété comme une simple chaîne
$ user="$(whoami)" #Mettre entre guillemets
$ echo "$user"
guest.name #Le résultat de la commande whoami est attribué
Si vous placez une barre oblique inverse devant un caractère, le caractère immédiatement après le \ perd sa signification spéciale et est interprété comme le sens littéral.
$ echo \$HOME # $Mettez une barre oblique arrière devant
$HOME #Tel quel$Sortie comme HOME
$ echo $HOME #Je dois ajouter une barre oblique inverse
/c/Users/guest.name #S'étend à la valeur d'une variable shell
$ echo \* # *Mettre une barre oblique arrière devant
* #Tel quel*Est sortie
$ echo * #Je dois ajouter une barre oblique inverse
bin doc src #Développé au nom de fichier dans le répertoire actuel
Référence: Takenori Yamamori "[Revised 3rd Edition] Shell Script Basic Reference ── #! / Bin / sh can do this" Technical Review Company (2018/11/14)
Recommended Posts