bash color echo:“-n”选项的问题

bash color echo:“-n”选项的问题

这是我打印彩色文本的函数:

cecho()
{
color=${1:-""}       #  defaults to original color if no color specified
colorreset="\E[0m"   #  back to black after function return
while read line; do
  echo -e "$color$line$colorreset"
done
return
}

$ blue="\E[34m"
$ echo "message" | cecho $blue
$ message  #  it appears in blue

但如果我使用 -n 选项,则不会打印任何内容:

$ echo -n "message" | cecho $blue
$

我需要“-n”选项,因为有时我打印的文本只包含整行带有颜色的单词,例如:

$ echo -n "this is "
$ echo "blue" | cecho $blue

答案1

我认为你的问题与“读取”需要行尾来读取输入这一事实有关。因此,它将挂起,直到输入某种输入(即永远)。

也许您应该向 cecho 添加 '-n' 选项。

$ echo "message | cecho -n $blue

然后重写你的函数来检查 ' -n',然后将其应用到echo的内部cecho

答案2

迈克尔的回答正确地指出,read没有返回任何内容,因为正在读取的数据末尾没有换行符。您可以通过while像这样改变条件来避免这种情况:

while read line || [ -n "$line" ];

答案3

为了实现你想要的,我会做以下事情:

#!/bin/bash

cecho()
{
color="${1:-""}"
colorreset=$(tput sgr0)    #  back to black after function return
while read line; do
 if [[ ! -n $color  ]]; then
  printf '%s\n' "$line $colorreset"
 else
  printf '%s\n' "$1$line $colorreset" 
fi
done
return
}
cecho "$1"

在此输入图像描述

相关内容