Когда я устанавливаю свой PS1 = '$ PWD', в командной строке отображается путь к текущему каталогу: /home/myname
, и он изменяется при изменении каталога.Одиночные/двойные кавычки ksh
Но когда я меняю его на «$ PWD» (двойные кавычки), он всегда показывает мне/home/myname независимо от того, где я нахожусь. Из того, что я прочитал, он говорит, что одинарные кавычки печатают именно то, что в нем есть, и не расширяют специальные символы, такие как $. Так почему это так работает?
Да, но почему в учебниках говорится, что одинарные кавычки печатают точно, что в них? Итак, «$ PWD» должен печатать «$ PWD»? – CuriousGuy
Одиночные кавычки предотвращают разрешение относительно текущей оболочки/команды, в то время как двойные кавычки допускают разрешение в текущей оболочке/команде. Текущая команда/команда «устанавливает значение переменной PS1», а не последующие операции оболочки, которые считывают значение. Использование двойных кавычек подобно буквальному написанию «set PS1 =/a/b/c», который фиксируется. Использование одинарных кавычек говорит: «Не разрешайте значение во время команды set», что приводит к его разрешению позже при использовании для отображения вашего приглашения, поэтому оно изменяется. – user1676075