Как интерполировать переменную сразу после `$` или `\$` в приглашении bash?
Я использую эту функцию:
function test(){
local var="hello"
PS1="\u\$$var"
}
Вывод, который я пытаюсь получить из функции: john$hello
,
Но то, что я получаю, это просто john
,
Если я добавлю пробел перед $var
тогда я подхожу к тому, что хочу, но не хочу места там.
Можно ли делать то, что я хочу, не имея этого места?
1 ответ
Так как вы использовали двойные кавычки при настройке PS1
, подстановка переменной оценивается в точке, где вы назначаете переменную. Итак, вы закончили настройку PS1
в \u$hello
, Оболочка раскрывает переменные перед отображением приглашения, и поскольку у вас нет ни одной переменной с именем hello
, эта часть приглашения расширяется до пустой строки.
Если вы установите PS1
используя одинарные кавычки, в этой точке замена переменных не будет выполнена. Это приведет к $var
часть, которая будет оценена при отображении приглашения, а это означает, что оно не будет выбирать локальную переменную, которую вы определили в вашей функции оболочки.
Третий вариант, который должен работать с локальной переменной из функции оболочки, это экранировать метасимволы:
PS1="\u\\\$$var"
Это должно привести к тому, что PS1 будет установлен на \u\$hello
, Конец приглашения не изменится, когда переменная var
изменения в этом случае.