之间有什么区别
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 "
> "
答案 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
字符序列用于分隔单词。