如何在bash变量中转义换行符和制表符?

如何在bash变量中转义换行符和制表符?,bash,tabs,escaping,variable-assignment,heredoc,Bash,Tabs,Escaping,Variable Assignment,Heredoc,我想创建一个multilne变量,它将被拆分成几行,在每一行上缩进(不显示缩进)。我试过几种方法: function regprompt { case "$TERM" in xterm*) PS1=$(cat <<-EOF ${blue} \u ${txtrst}on ${cyan}\h${white}\$gitps1 ${blue}\${fill} \ $

我想创建一个multilne变量,它将被拆分成几行,在每一行上缩进(不显示缩进)。我试过几种方法:

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
}
函数提示{
中的“$TERM”案例
xterm*)

PS1=$(cat如果变量不需要包含制表符,则可以使用单引号(允许换行),使用制表符缩进,然后使用
tr
删除制表符。例如:

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

请注意,缩进必须是制表符,而不是空格才能起作用。不幸的是,我不知道如何在格式中指出这一点。这一技巧在脚本中有效,但在交互式shell中,输入制表符可能不可能,因为readline使用制表符来完成制表符。如果变量中不需要前导空格,则也可以使用空格,而不是
tr-d'\t'
使用类似于
sed-e的/^\+/'
的东西,效果非常好!谢谢,尝试排序是一件痛苦的事情,应该先问一下这里;猜是时候开始学习sed和tr之类的东西了:|。