Как интерполировать переменную сразу после `$` или `\ $` в приглашении bash?

Я использую эту функцию:

function test(){
  local var="hello"
  PS1="\u\$var"
}

Вывод, который я пытаюсь получить из функции, - john$hello.

Но то, что я получаю, это просто john.

Если я добавлю пробел перед $var, то получу близко к тому, что я хочу - но я не хочу, чтобы это место было там.

Можно ли делать то, что я хочу, не имея этого места?

1
задан 24 October 2011 в 05:47

1 ответ

Поскольку вы использовали двойные кавычки при установке PS1, подстановка переменной оценивается в точке, где вы назначаете переменную. Итак, вы закончили настройку PS1 на \u$hello. Оболочка раскрывает переменные перед отображением приглашения, и, поскольку у вас нет переменной с именем hello, эта часть приглашения раскрывается до пустой строки.

Если вы установите PS1 с помощью одинарных кавычек, замена переменных в этой точке не будет выполняться. Это приведет к тому, что часть $var будет оценена при отображении приглашения, а это означает, что он не будет выбирать локальную переменную, которую вы определили в вашей функции оболочки.

Третий вариант, который должен работать с локальной переменной из функции оболочки, состоит в том, чтобы экранировать метасимволы:

PS1="\u\\\$var"

Это должно привести к тому, что PS1 будет установлен на \u\$hello. Конец приглашения не изменится, когда в этом случае изменится переменная var.

0
ответ дан 24 October 2011 в 05:47

Другие вопросы по тегам:

Похожие вопросы: