同一行上的回声输出

时间:2014-09-14 15:29:37

标签: bash shell

我正在尝试使用bash脚本中的echo命令在同一行上打印输出。 Echo Command在循环内部给出,每次循环运行时,都执行echo命令。但通常情况下,echo每次执行时都会占用一条新行,但我希望每次执行时输出都在同一行。

这是我的示例小代码的样子:

 #!/bin/bash
loop=1;
while [ $loop -lt 5 ];
do
echo "-"
let loop=loop+1
done

我也尝试使用echo命令的-n选项,但是没有输出。我用echo -n“ - ”替换了stmt - echo“ - ”。

所需的输出是: “-----”

有人能帮助我吗

3 个答案:

答案 0 :(得分:3)

你说你试过

echo -n "-"

应该有效。事实上,我怀疑它确实如此。

问题可能是您在输出的最后没有换行符。随着改变

echo -n "-"

您的脚本应该打印5个-个字符而不换行。输出可能已被脚本完成后打印的shell提示符破坏。

作为快速测试,请尝试添加

sleep 5

到脚本的末尾,看看是否显示-----。 5秒后,查看打印下一个shell提示时会发生什么。

试试这个:

#!/bin/bash
loop=1;
while [ $loop -lt 5 ]
do
    echo -n "-"
    let loop=loop+1
done
echo ""

最终echo ""只打印换行符。

其他一些注意事项:

缩进很重要,特别是对于更大和更复杂的脚本。它一目了然地显示了代码的结构,使其更易于阅读。

在问题的代码中,#!/bin/bash前面有一个空格。 #!仅在行的开头才被识别。如果没有有效的#!行,您的脚本将由/bin/sh执行,而不是由/bin/bash执行。在这种情况下,这可能并不重要,因为您没有使用任何特定于bash的功能。发布问题时可能会出现错误,但请务必检查您的实际脚本并删除该空格。

echo命令存在于许多不同的版本中。它内置于大多数shell中,也可作为单独的可执行文件/bin/echo使用。不同的版本可以具有微妙的不同行为,它们识别的选项和特殊字符的语法。支持-n选项打印没有终止换行符的行可能几乎通用。

printf命令(类似于C' s printf()函数)也存在于多个实现中,但其行为更加一致。如果您执行的操作不仅仅是打印简单的单行邮件,那么使用printf而不是echo会更安全。同样,在这种情况下它可能不重要,但记住它是件好事。

答案 1 :(得分:1)

您应该仅将echo用于信息性消息,并将printf用于其他所有消息,因为它是一个功能更强大,更灵活且可靠的工具。陈述序列

printf '-'
printf '-'
printf '-'
printf '-'
printf '-'

实际产生输出-----

答案 2 :(得分:0)

尝试以下方法而不是当前的echo语句:

  

echo -e“ - / c”

-e选项允许echo接受分隔符,而/ c停止输出(在这种情况下是你不想要的尾部换行符)。

相关问题