Linux solaris上heredoc中的转义换行符
我使用的是bash,它在Linux上工作:Linux solaris上heredoc中的转义换行符,linux,bash,solaris,heredoc,Linux,Bash,Solaris,Heredoc,我使用的是bash,它在Linux上工作: read -r -d '' VAR<<-EOF Hello\nWorld EOF echo $VAR > trail 当我在Solaris上运行时 审判文件 Hello World 换行符(\n)正在替换为换行符。我怎样才能避免呢 这是herdoc或echo命令的问题吗 [更新] 根据提供的解释: 在Solaris上工作正常。问题在于echo。定义了行为,其中解释\n是XSI的一部分,而不是基本POSIX本身 您可以在所有平
read -r -d '' VAR<<-EOF
Hello\nWorld
EOF
echo $VAR > trail
当我在Solaris上运行时
审判文件
Hello
World
换行符(\n)正在替换为换行符。我怎样才能避免呢
这是herdoc或echo命令的问题吗
[更新]
根据提供的解释:
在Solaris上工作正常。问题在于
echo
。定义了行为,其中解释\n
是XSI的一部分,而不是基本POSIX本身
您可以在所有平台上使用printf
(这是一种很好的做法):
顺便说一下,这对bash来说不是问题。如果您使用了#/usr/bin/env bash
作为shebang(也不使用sh脚本
运行脚本),行为应该是一致的
如果您使用
#/bin/sh
,您将得到系统默认使用的任何shell,其行为如下所示。问题在于echo
。定义了行为,其中解释\n
是XSI的一部分,而不是基本POSIX本身
您可以在所有平台上使用printf
(这是一种很好的做法):
顺便说一下,这对bash来说不是问题。如果您使用了#/usr/bin/env bash
作为shebang(也不使用sh脚本
运行脚本),行为应该是一致的
如果您使用#/bin/sh
,您将得到系统默认使用的shell,其行为如下所示。补充:
即使在bash
执行脚本时,观察到的行为(默认情况下解释转义序列,如\n
)也可以通过几种方式产生
可能生效,这使得默认情况下shopt-s xpg\u echo
内置解释echo
转义序列\
可能生效,默认情况下禁用enable-n echo
内置文件并运行外部可执行文件,该可执行文件的行为取决于平台echo
- 如果您的交互式初始化文件(例如,
)包含上述命令,并且您~/.bashrc
(源代码
)可以从交互式shell中删除脚本 - 不寻找脚本来源时:如果您的环境包含指向脚本的
变量,则该脚本将在脚本运行之前获得来源;因此,如果该脚本包含上述命令,它们将影响脚本BASH_ENV
bash
执行脚本时,观察到的行为(默认情况下解释转义序列,如\n
)也可以通过几种方式产生
可能生效,这使得默认情况下shopt-s xpg\u echo
内置解释echo
转义序列\
可能生效,默认情况下禁用enable-n echo
内置文件并运行外部可执行文件,该可执行文件的行为取决于平台echo
- 如果您的交互式初始化文件(例如,
)包含上述命令,并且您~/.bashrc
(源代码
)可以从交互式shell中删除脚本 - 不寻找脚本来源时:如果您的环境包含指向脚本的
变量,则该脚本将在脚本运行之前获得来源;因此,如果该脚本包含上述命令,它们将影响脚本BASH_ENV
Hello
World
echo -E $VAR > trail
printf "%s\n" "$VAR"