2012-03-09 78 views
2

我想要创建一个multilne变量,它将分成几行,在每一行上缩进(不显示缩进)。我曾尝试几种方法:如何在bash变量中转义换行符和制表符?

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})缩进,我只想表明一个空间(越狱前的一个)。其他一切都显示正确。第二个选项也是一样的。屏幕选项将正确显示,我只想知道是否有办法保持它的组织?

回答

3

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

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

请注意,缩进必须是制表符,而不是空格才能起作用。不幸的是,我不知道如何在格式中指出这一点。这个技巧将在脚本中起作用,但在交互式shell中输入标签可能是不可能的,因为标签由readline用于制表符完成。如果领导空格不需要在变量中出现,也可以使用空格,而不是tr -d '\t'使用类似sed -e 's/^ \+//'的东西。

+0

奇妙地工作!谢谢,试图解决这个问题是一种痛苦,应该首先在这里被问到;猜猜它开始学习sed和tr等的时间:|。 – bluTaz 2012-03-09 14:01:49