在shell脚本中没有换行符的'echo'

时间:2012-06-25 16:38:15

标签: shell command-line sh

我的脚本中有echo的问题:

echo -n "Some string..."

打印

-n Some string...

并移至下一行。在控制台中它正确地工作而没有换行符:

Some string...

11 个答案:

答案 0 :(得分:464)

echo命令有多个版本,具有不同的行为。显然,用于脚本的shell使用的版本无法识别-n

printf命令具有更加一致的行为。 echo适用于echo hello之类的简单内容,但我建议将printf用于更复杂的事情。

您使用的是什么系统,以及您的脚本使用了哪些shell?

答案 1 :(得分:116)

bash有一个名为“echo”的“内置”命令:

$ type echo
echo is a shell builtin

此外,还有一个“echo”命令是一个正确的可执行文件(即shell分叉和执行/bin/echo,而不是解释echo并执行它):

$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21  2011 /bin/echo

echo\c-n的WRT行为各不相同。您最好的选择是使用printf,我可以看到四种不同的* NIX风格:

$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"

答案 2 :(得分:82)

尝试

echo -e "Some string...\c"

它对我有用(正如我从你的问题中所理解的)。

请注意,我从man页面获得了此信息。 man页面还指出shell可能有自己的echo版本,我不确定bash是否有自己的版本。

答案 3 :(得分:2)

如果在if中使用echo和其他命令(如“read”),它可能会忽略该设置,无论如何它都会跳转到新行。

答案 4 :(得分:1)

enable -n echo
echo -n "Some string..."

答案 5 :(得分:0)

most popular linux Ubuntu就是bash

  1. 检查您使用的是哪个shell?以下大部分内容有效,否则see this

    echo $0

  2. 如果上面显示的是bash,则下面的显示会起作用:

    printf "hello with no new line printed at end"

    echo -n "hello with no new line printed at end"

答案 6 :(得分:0)

当您去写shell脚本时,总是把第一行作为#!/ usr / bin / env bash 。此shell不会忽略或操纵转义序列。 ex echo“这是第一\ n行” 打印这是第一行。

答案 7 :(得分:0)

我相信现在您的输出如下所示

    self.log = None
    self.data = data_in # a pandas data frame  

您可以使用~ echo -e "String1\nString2" String1 String2 将多行标准输出放入同一行。

xargs

答案 8 :(得分:0)

要实现此目的,基本上我经常使用两种方法:

1。。将 光标 转义字符(\c)与echo -e

一起使用

示例

for i in {0..10..2}; do
  echo -e "$i \c"              
done
# 0 2 4 6 8 10
  • -e标志 E 启用字符串中的转义字符。
  • \c C 光标带回到当前行。

OR

2。。使用printf命令

示例

for ((i = 0; i < 5; ++i)); do
  printf "$i "
done
# 0 1 2 3 4

答案 9 :(得分:0)

请注意,AIX 上的 /usr/bin/echo 和 /bin/echo 不支持任何参数,因此如果使用 sh 或 ksh shell,-n 和 -e 都不起作用。
csh 和 bash 有自己的内置 echo 支持 -n.
这是相关的,因为许多 shell 脚本明确使用 sh 或 ksh。

AIX 确实有 /usr/bin/printf 所以正如一些早期答案中所建议的

$ printf "whatever"

相当于 echo -n "whatever" 支持 -n 的地方

答案 10 :(得分:0)

我在 IMB z/OS 中遇到了同样的问题,所以我使用了 print 而不是 echo,它奏效了。

print -n "Some string ...."

https://www.ibm.com/docs/en/zos/2.2.0?topic=descriptions-print-return-arguments-from-shell

它可能对某人有所帮助。