Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在echo中使用命令会产生不同的结果_Shell_Freebsd_Csh_Subshell - Fatal编程技术网

Shell 在echo中使用命令会产生不同的结果

Shell 在echo中使用命令会产生不同的结果,shell,freebsd,csh,subshell,Shell,Freebsd,Csh,Subshell,我正在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中的语法有问题吗?对于csh shell,freebsd上的默认she

我正在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中的语法有问题吗?

对于csh shell,freebsd上的默认shell:

echo "`cat filename | tr '\t' '\n'`"
来自@mateusz piotrowski和@ismael luceno回答: 你不能,你需要另一个外壳。 通过以下方式更改全局:

chsh -s /usr/local/bin/bash
或者只需在脚本顶部添加:

#!/usr/local/bin/bash
对于freebsd上的非默认shell:

您需要在子命令上添加引号:

echo "`cat filename | tr '\t' '\n'`"

这是因为在向命令传递参数时,bash将\n替换为空格,而对于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在向命令传递参数时将\n替换为空格,而不是引用它。与sh/ksh不同,C shell将始终转换换行符,您要么避免使用命令扩展,要么在csh端使用一些转义代码+替换来解决问题。

与sh/ksh不同,C shell总是转换换行符,您可以避免使用命令扩展,或者在csh端使用一些转义代码+替换来解决问题。

看起来最简单的解决方法是将shell更改为
/bin/sh
,如果您熟悉Bash,这应该适合您

要更改shell运行,请执行以下操作:

chsh -s /usr/local/bin/bash
或者,您只需在终端中键入
sh
,即可在
/bin/sh
中享受互动会话

但是,如果您真的想使用Bash,这里有一个线程可能会有所帮助:


附带说明:不建议在FreeBSD中永久更改root的shell。

解决此问题的最简单方法似乎是将shell更改为
/bin/sh
,如果您熟悉Bash,这应该适合您

要更改shell运行,请执行以下操作:

chsh -s /usr/local/bin/bash
或者,您只需在终端中键入
sh
,即可在
/bin/sh
中享受互动会话

但是,如果您真的想使用Bash,这里有一个线程可能会有所帮助:

附带说明:不建议在FreeBSD中永久更改root的shell。

您应该使用

foreach line (`cat a | tr '\t' '\n'`")
  echo $line
end
你应该使用

foreach line (`cat a | tr '\t' '\n'`")
  echo $line
end

不在FreeBSD上工作。结果相同,显示在一行中。不使用FreeBSD。结果相同,显示在一行中。FreeBSD上显示非法变量名错误消息。您使用的是什么shell?echo$SHELLecho$shell给我/bin/csh有人添加了相同的问题,似乎您需要设置一个变量,然后echo:
set var=“'cat filename|tr'\t'\n'`”;回声“$var”没有运气,相同的输出:(FreeBSD上显示非法变量名错误消息。您使用的是什么shell?,echo$SHELLecho$shell给我/bin/csh有人添加了相同的问题,似乎您需要设置一个变量,然后echo:
set var=“`cat filename | tr'\t'\n'`“echo”$var”
没有运气,相同的输出:(如果您使用的是
csh
,请在问题中明确说明并添加相应的标记。如果您使用的是
csh
,请在问题中明确说明并添加相应的标记。