Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux solaris上heredoc中的转义换行符_Linux_Bash_Solaris_Heredoc - Fatal编程技术网

Linux solaris上heredoc中的转义换行符

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本身 您可以在所有平

我使用的是bash,它在Linux上工作:

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
    变量,则该脚本将在脚本运行之前获得来源;因此,如果该脚本包含上述命令,它们将影响脚本

在Solaris上使用<代码> BASH 或<代码> KSH 吗?<代码>回声“hello \nWord”< /Case>在Solaris的中间包含换行符吗?它应该是一个BASH构建,不管平台是什么,但是如果你的BASH是很旧的……?你在Solaris上使用<代码> Bash < /C>还是<代码> KSH < /代码>?< Engult' hello \nWord '/COD>在Solaris中间有一个换行符吗?无论平台是什么,它都应该是Bash内置的,但是如果您的Bash非常旧。。。?
Hello
World
echo -E $VAR > trail
printf "%s\n" "$VAR"