我正在尝试使用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“ - ”。
所需的输出是: “-----”
有人能帮助我吗
答案 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停止输出(在这种情况下是你不想要的尾部换行符)。