为什么echo产生换行符?

时间:2014-02-03 14:50:05

标签: bash echo

之间有什么区别
echo -n "
> "

echo -n ""

第一个产生换行,而第二个不产生换行。

我正在运行GNU bash,版本4.2.45(1)-release(x86_64-pc-linux-gnu)

编辑:我得到输入在这里得到换行符。我应该更清楚这个问题。请考虑以下脚本input.sh

#!/bin/bash
echo -n $1

以下内容不会产生换行符。

./input.sh "
> "

2 个答案:

答案 0 :(得分:3)

字符串

"
 > "
就bash而言,

有一个换行符。 -n标志只表示echo不会在输出结尾处打印额外的换行符。它仍会重现您的输入,包括换行符。

答案 1 :(得分:1)

扩展@chepner的评论。考虑一下:

$ set -- "
"

$ echo -n "$1" | od -c
0000000  \n
0000001

$ echo -n $1 | od -c
0000000

当您保持变量不加引号时,shell会删除任何前导或尾随空格序列。所以当你不引用1美元时,bash会丢弃你的换行符。在调用“echo”之前发生,因此“echo -n”被赋予无参数

从手册的Word Splitting部分:

  

如果IFS未设置,或其值正好是<space><tab><newline>,则为默认值,然后是<space><tab><newline>的序列并且忽略先前扩展结果的结束,并且任何不在开头或结尾的IFS字符序列用于分隔单词。