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