我正在使用bash,这适用于Linux:
read -r -d '' VAR<<-EOF
Hello\nWorld
EOF
echo $VAR > trail
即Linux上的文件内容是
Hello\nWorld
当我在Solaris上运行时 试用文件
Hello
World
换行符(\ n)正在换行换行符。我怎么能避免呢?
heredoc或echo命令有问题吗?
[UPDATE]
根据提供的解释here:
echo -E $VAR > trail
在Solaris上运行良好。
答案 0 :(得分:4)
问题在于echo
。行为定义为in POSIX,其中解释\n
是XSI的一部分,但不是基本的POSIX本身。
您可以在使用printf
的所有平台上避免这种情况(无论如何这都是好的做法):
printf "%s\n" "$VAR"
顺便说一句bash
这不是问题。如果您使用#!/usr/bin/env bash
作为shebang(并且也不使用sh script
运行脚本),则行为将保持一致。
如果您使用#!/bin/sh
,您将获得系统使用的任何shell作为默认值,具有不同的行为。
答案 1 :(得分:1)
补充@that other guy's helpful answer:
即使 bash
执行您的脚本,观察到的行为有多种方式 - echo
默认解释转义序列,例如{{ 1}} - 可以来:
\n
可能有效,默认情况下会使shopt -s xpg_echo
内置解释echo
转义序列。\
可能会生效,默认情况下会禁用enable -n echo
内置并运行外部可执行文件 - 并且可执行文件&#39;的行为是依赖于平台的。这些选项通常在您运行脚本时不会继承,但仍然有方式可以生效:
echo
)包含上述命令,并且 ~/.bashrc
(source
)您的脚本来自交互式shell .
变量,则在脚本运行之前该脚本 sourced ;因此,如果该脚本包含上述命令,则会影响您的脚本。