J'utilise Ubuntu 16.04 LTS. J'ai une question pour définir PS1 et utiliser des guillemets simples. Je m'entraîne à changer une invite. J'ai donc suivi un exemple dans le livre, puis je suis confronté à une curiosité.
L'exemple est ci-dessous:
user1@myubuntu:~$ PS1='$PWD '
/home/user1
J'ai appris que les guillemets simples font des caractères spéciaux (comme $
, ``
, \
, etc.) en caractères généraux.
Donc, je pense que l'invite au-dessus de la déclaration doit être comme ci-dessous:
user1@myubuntu:~$ PS1='$PWD '
$PWD
Pourquoi le caractère spécial ($
) fonctionne toujours entre guillemets simples?
Bash (et autres shells) n'impriment pas PS1
Tel quel. Ils l'interprètent et affichent la sortie. Bash, par exemple, développe divers codes spéciaux comme \u
, \w
, Etc., puis ( du manuel Bash, Contrôle de la Invite ):
Une fois la chaîne décodée, elle est développée via l'expansion des paramètres, la substitution de commandes, l'expansion arithmétique et la suppression des guillemets, sous réserve de la valeur de l'option Shell
promptvars
(voir Bash Builtins ).
Expansion de paramètre (c'est-à-dire, expansion de variable) signifie qu'une chaîne comme $PWD
Dans PS1
Est développée. Si vous souhaitez afficher un simple $PWD
Dans l'invite, effectuez l'une des opérations suivantes:
PS1='\$PWD '
# or
shopt -u promptvars
PS1='$PWD '