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