Как избежать перехода на новую строку и табуляции в переменной bash? - PullRequest
2 голосов
/ 09 марта 2012

Я хочу создать переменную из нескольких строк, которая будет разбита на несколько строк, с отступом в каждой новой строке (без отображения отступов). Я пробовал несколько способов:

function regprompt {
    case "$TERM" in
        xterm*)
            PS1=$(cat <<-EOF
                    ${blue} \u ${txtrst}on ${cyan}\h${white}\$gitps1 ${blue}\${fill} \
                    ${undgrn}\d \D{%r} ${blue}\
                    \n[ ${yellow}\$newPWD ${blue}] ${txtrst}$ ${blue}
EOF
)
        ;;
        linux*)
            PS1="${green} \u ${txtrst}on ${cyan}\h${white}\$gitps1 ${green}\${fill} \
                 ${undgrn}\d \D{%r} ${green}\
                 \n[ ${yellow}\$newPWD ${green}] ${txtrst}$ ${green}"
        ;;
        screen*)
            PS1="${green} \u ${txtrst}on ${cyan}\h${white}\$gitps1 ${green}\${fill} \
${undgrn}\d \D{%r} ${green}\
                 \n[ ${yellow}\$newPWD ${green}] ${txtrst}$ ${green}"
        ;;
    esac
}

Первая опция показывает часть даты (\ d \ D {% r}) с отступом, который я хочу показать только один пробел (тот, что перед escape-кодом) Все остальное на нем показывает правильно. Второй вариант делает то же самое. Параметр экрана будет отображаться правильно, я просто хочу знать, есть ли способ сохранить его организованным?

1 Ответ

3 голосов
/ 09 марта 2012

Если ваши переменные не должны содержать вкладки, вы можете использовать одинарную кавычку (которая позволяет переводить строки), сделать отступ для вкладок, а затем удалить вкладки с помощью tr.Например:

var='ab
        cd
                        ef
gh
        ij'
var=$(echo "$var" | tr -d '\t')
echo "$var"

Обратите внимание, что отступы должны быть табуляцией, а не пробелами, чтобы это работало.К сожалению, я не знаю, как указать это в форматировании.Этот трюк будет работать в скрипте, но в интерактивной оболочке ввод вкладок может быть невозможен, потому что tab используется readline для завершения вкладки.Если в вашей переменной не должно быть начальных пробелов, вы также можете использовать пробелы и вместо tr -d '\t' использовать что-то вроде sed -e 's/^ \+//'.

...