我正在使用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)。
在互联网上搜索没有给出任何结果。有人可以告诉我发生了什么事吗?它让我疯了..
答案 0 :(得分:2)
为了保持兼容性,调用/bin/sh
的shell通常会尝试模拟POSIX shell或Bourne shell的某些变体。 POSIX和Bourne都不支持$'...'
。有两种可能的解决方案:
方法1:使用支持bash
的shell的shebang,例如$'...'
。
或者,
方法2:使用POSIX方法为IFS
分配换行符:
IFS='
'
(帽子提示:Gordon Davisson)
来自man zsh
:
Zsh
尝试模仿sh
或ksh
,当sh
或ksh
被调用时 分别
来自man bash
:
如果使用名称
bash
调用sh
,它会尝试模仿。{1}} sh的历史版本的启动行为尽可能接近, 同时符合POSIX标准。