4

我正在尝试执行以下操作:

#!/bin/sh
ssh user@server "echo \"Test \n for newline\""

这显示:

test \n for newline

如何让 shell 解释\n为实际的换行符?

4

4 回答 4

4

尝试使用-e选项,例如echo -e "Test \n for newline".

如果您echo没有-e选项,那么我会使用printf. 它被广泛使用,并且它的实现几乎没有那么多变化。

于 2013-06-17T13:31:13.977 回答
2

为了获得更大的可移植性,请使用printf而不是echo.

#!/bin/sh
ssh user@server 'printf "Test \n for newline"'

根据 POSIX 标准,echo\n作为换行符处理。除非您提供选项,否则bash内置echo不会。-e

于 2013-06-17T13:42:26.493 回答
1

只需使用其中之一

#!/bin/sh
ssh user@server "echo -e \"Test \n for newline\""

或者

#!/bin/sh
ssh user@server 'echo  -e "Test \n for newline"'

或者

#!/bin/sh
ssh user@server "echo  -e 'Test \n for newline'"

甚至

#!/bin/sh
ssh user@server "echo 'Test 
 for newline'"

所有这些都会显示

Test 
 for newline

(注意第一行之后的尾随空格和第二行之前的前导空格 - 我刚刚复制了你的代码)

于 2013-06-17T13:45:16.063 回答
0

在执行 ssh 命令之前,使用换行符更新 IFS 环境变量。

IFS='                                  
'

将 ssh 命令输出存储到变量

CMD_OUTPUT=$(ssh userName@127.0.0.1 'cat /proc/meminfo')

每行迭代输出

for s in $CMD_OUTPUT; do echo "$s"; done
于 2017-07-13T12:45:26.883 回答