我在FreeBSD上运行以下命令:
$ cat filename | tr '\t' '\n'
#Output
DOCS : ON
NLS : ON
RCSI : ON
$ echo `cat filename | tr '\t' '\n'`
#Output
DOCS : ON NLS : ON RCSI : ON
为什么echo不显示与实际命令输出相同? echo中的语法有什么问题吗?
答案 0 :(得分:1)
对于csh shell,freebsd上的默认shell:
来自@ mateusz-piotrowski和@ ismael-luceno回答: 你不能,你需要另一个shell。 用:改变全局:
chsh -s /usr/local/bin/bash
或只是添加到脚本的顶部:
#!/usr/local/bin/bash
对于freebsd上的非默认shell:
您需要在子命令中添加引号:
echo "`cat filename | tr '\t' '\n'`"
这是因为bash在没有引用的情况下将参数传递给命令时会用空格替换\ n
答案 1 :(得分:1)
与sh / ksh不同,C shell将始终转换换行符,您要么避免使用命令扩展,要么在csh端使用一些转义代码+替换解决问题。
答案 2 :(得分:0)
echo "`cat filename | tr '\t' '\n'`"
答案 3 :(得分:0)
看起来解决问题的最简单方法是将shell更改为/bin/sh
,如果您熟悉Bash,则应该适合您。
为了改变你的shell运行:
chsh -s /usr/local/bin/bash
或者,您只需在终端中输入sh
即可享受/bin/sh
中的互动环节。
如果你真的想使用Bash,那么这里有一个可能有帮助的帖子:How to Install bash on FreeBSD
作为旁注:不建议在FreeBSD中永久更改root的shell。
答案 4 :(得分:0)
你应该使用
foreach line (`cat a | tr '\t' '\n'`")
echo $line
end