使用换行符分隔符时,Bash会删除“N”字符

时间:2018-04-06 21:12:53

标签: bash ubuntu

我正在使用Windows Linux子系统(Ubuntu)。当我尝试设置换行符分隔符时,我会丢失'n'字符。我的简化脚本;

#!/bin/sh
echo $HOME #gives /home/hennio
IFS=$'\n'
echo $HOME #gives /home/he  io

IFS=$'\n\b'没有解决问题。我用$(哪个sh)检查了我的shebang,这是正确的(尽管使用zsh)。

在互联网上搜索没有给出任何结果。有人可以告诉我发生了什么事吗?它让我疯了..

1 个答案:

答案 0 :(得分:2)

为了保持兼容性,调用/bin/sh的shell通常会尝试模拟POSIX shell或Bourne shell的某些变体。 POSIX和Bourne都不支持$'...'。有两种可能的解决方案:

方法1:使用支持bash的shell的shebang,例如$'...'

或者,

方法2:使用POSIX方法为IFS分配换行符:

IFS='
'

(帽子提示:Gordon Davisson

文档

来自man zsh

  

Zsh尝试模仿shksh,当shksh被调用时   分别

来自man bash

  

如果使用名称bash调用sh,它会尝试模仿。{1}}   sh的历史版本的启动行为尽可能接近,   同时符合POSIX标准。