如何在 bash 命令返回的结果中保留换行符

如何在 bash 命令返回的结果中保留换行符

假设我可以以用户 foo 的身份 rsh 到机器 XXX,然后执行:

$result=$(rsh -l foo XXX "ls");
echo $result;

我发现结果中的换行符被删除了,我无法逐行查看结果。那么如果我想在返回的结果中包含换行符,我该怎么做?

答案1

换行符就在那里;错误在于使用echo它来检查它(变量周围也没有双引号!)

result=$(rsh -l foo XXX "ls")
echo "$result"

在简单的情况下,你可以不用引号,但有趣的情况甚至可能包含安全问题。

如果你只捕获标准输出,rsh以便自己将其打印到标准输出,那么这是一个无用地使用echo

答案2

编辑:如果您指的是每个文件之间的换行符,请确保引用结果:

result="$(rsh -l foo XXX "ls");"

这将保留任何字符除了NUL($'\0'),不能存储在 Bash 变量中。

如果你的意思是尾随换行符丢失了,那么这是我所知道的最简单的解决方案:

resultx="$(commands...; echo x)"
result="${resultx%x}"

相关内容