我正在使用bash,这在Linux上是可行的:
read -r -d '' VAR<<-EOF
Hello\nWorld
EOF
echo $VAR > trail也就是说,Linux上文件的内容是
Hello\nWorld当我在Solaris上运行试用文件时
Hello
World换行符(\n)将被换行符替换。我怎么才能避免呢?
这是本文档的问题还是回送命令的问题?
更新
根据提供的解释,这里:
echo -E $VAR > trail在Solaris上工作得很好。
发布于 2014-05-07 15:46:21
即使在bash 正在执行脚本时,观察到的行为--默认情况下解释转义序列(如 \n )--也有几种方法可以实现E 219
shopt -s xpg_echo可能生效,这使得echo内置在默认情况下解释\转义序列。enable -n echo可能是有效的,它禁用echo内置程序,默认情况下运行外部可执行文件,并且该可执行文件的行为依赖于平台。运行脚本时通常不会继承这些选项,但是仍然有一些方法可以使生效。
~/.bashrc)包含上述命令和您的~/.bashrc (.)命令,则您的脚本来自交互式shell。BASH_ENV变量,则该脚本是在脚本运行之前获得的;因此,如果该脚本包含上述命令,它们将影响您的脚本。发布于 2014-05-07 15:14:48
问题在于echo。行为被定义为在POSIX中,其中解释\n是XSI的一部分,而不是基本的POSIX本身。
您可以在所有平台上使用printf (这是一个很好的实践)来避免这种情况:
printf "%s\n" "$VAR"顺便说一下,这对bash来说不是个问题。如果您使用#!/usr/bin/env bash作为shebang (而且也没有使用sh script运行脚本),则行为应该是一致的。
如果您使用#!/bin/sh,您将得到系统作为默认值使用的任何shell,这些shell的行为都是不同的。
https://stackoverflow.com/questions/23521510
复制相似问题