在尝试编写脚本时,我今天发现了cat
的一个有趣问题。如果我在命令行执行以下操作,一切正常:
var=$(ssh user@server "cat /directory/myfile.sh")
echo $var > ~/newfile.sh
这有效,我有一个包含所有正确格式的脚本文件,可以运行它。但是,如果我在脚本中执行完全相同的操作:
#!/bin/sh
var=$(ssh user@server "cat /directory/myfile.sh")
echo $var > ~/newfile.sh
文件因回车和奇怪的格式而受损。
有谁知道为什么会这样?我的目标是最终从服务器捕获脚本并在我的机器上本地运行它。
修改
我现在知道发生这种情况是因为我在shell脚本中调用了#!/bin/sh
。命令行有效,因为我正在使用zsh
并且它保留了格式。
有没有办法收回结果而不管shell?
答案 0 :(得分:1)
正如您似乎已经想到的那样,默认情况下,在zsh上关闭分词,但在sh
,bash
等处开启。您可以通过引用变量来阻止所有shell中的分词:
echo "$var" > ~/newfile.sh
请注意,默认情况下,echo
会在其输出中附加换行符,您可以使用echo
来抑制(在大多数-n
实现和内置版本上)。