我的脚本中有echo
的问题:
echo -n "Some string..."
打印
-n Some string...
并移至下一行。在控制台中它正确地工作而没有换行符:
Some string...
答案 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
:
检查您使用的是哪个shell?以下大部分内容有效,否则see this:
echo $0
如果上面显示的是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
它可能对某人有所帮助。