shell输出bash下的多行文字?

时间:2016-12-06 03:40:55

标签: bash shell

以下是我的玩具程序

xxxx@xxxx-Dell:~/Desktop$ foo=$'line1\nline2'
xxxx@xxxx-Dell:~/Desktop$ echo $foo
line1 line2
xxxx@jxxxx-Dell:~/Desktop$ echo "$foo"
line1
line2

我知道shell命令语言中的引用机制。我的期望是两个echo命令输出相同的东西,因为美元符号无论如何都是明文和双重qouting的元字符。那么为什么它会有所不同。它是一些嵌套的qutation吗?

1 个答案:

答案 0 :(得分:3)

引用和未引用版本之间的差异可能取决于您的shell,但最有可能是:

  • 引用,"$foo"表示传递给echo命令的单个参数,该命令逐字打印,后跟换行符。
  • 未加引号,$foo扩展为由$IFS分隔的一组参数。如果未设置$IFS,则默认为空格,如果没有字段分隔符,则只有一个字段。

在未加引号的版本中,没有理由认为换行符会被视为输出的一部分,因为它甚至不是输入的真正部分echo命令。它只是分开论点。

如果您想更改此行为,可以更改$IFS设置,但我不推荐此设置。需要处理字段时更改IFS,而不是格式化输出。

要获得可预测的输出,请遵循POSIX.1建议,并且根本不要使用echo。请改用printf