回声以不同的方式工作

时间:2018-06-13 10:06:28

标签: bash

此处PLUGIN=ABC

$ echo "{\"PluginName\": \"${PLUGIN}\""
""PluginName": "ABC
$ echo "{\"PluginName\":${PLUGIN}\",\"Filename\":\"${VAR}\" , \"ErrorString\":"
","Filename":"ABC" , "ErrorString":eployerProps

但是,如果我将上面的变量PLUGIN更改为其工作的任何其他字符串。

$ echo "{\"PluginName\":\"${PLUGINS}\",\"Filename\":\"${VAR}\" , \"ErrorString\":"
{"PluginName":"ABC","Filename":"ABC" , "ErrorString":

无法理解最新的原因。这是bash 4但是在其他服务器上工作正常。

2 个答案:

答案 0 :(得分:1)

我无法重现你的问题。这就是我的bash 4.4.23(1)打印:

$ PLUGIN=ABC
$ echo "{\"PluginName\": \"${PLUGIN}\""
{"PluginName": "ABC"
  

但是,如果我将上面的变量PLUGIN更改为其工作的任何其他字符串。

您是否注意到您的第二个命令与第一个命令不同?

echo "{\"PluginName\":${PLUGIN}\",\"Filename\":\"${VAR}\" , \"ErrorString\":"
                      |       |
            different |        \  different
                      |         |
echo "{\"PluginName\":\"${PLUGINS}\",\"Filename\":\"${VAR}\" , \"ErrorString\":"

但是,使用printf

可以让您的生活更轻松
$ PLUGIN=ABC
$ VAR=XYZ
$ printf '{"PluginName": "%s"\n' "$PLUGIN"
{"PluginName": "ABC"
$ printf '{"PluginName":"%s","Filename":"%s","ErrorString":\n' "$PLUGIN" "$VAR"
{"PluginName":"ABC","Filename":"XYZ","ErrorString":

甚至更好的一般方法:

$ printf '{'; printf '"%s":"%s",' PluginName "$PLUGIN" Filename "$VAR"
{"PluginName":"ABC","Filename":"XYZ",

答案 1 :(得分:1)

  

此处PLUGIN=ABC

不,这不能解释你所看到的输出。 PLUGIN=$'ABC\r'更有可能(即A B C后面有回车)。

当打印到终端时,回车将光标移回到行的开头,这就是为什么输出看起来很混乱。

尝试使用echo "$PLUGIN" | cat -vecho "$PLUGIN" | xxd(或任何其他十六进制转储工具)来查看其中的实际内容。

  

但不能仅在特定服务器上执行。

如果PLUGIN是从文件中读取一行的结果,那么该文件可能是该服务器上的Windows / DOS格式(带有回车/换行结尾)而不是Unix格式(仅限换行) )。