此处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但是在其他服务器上工作正常。
答案 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 -v
或echo "$PLUGIN" | xxd
(或任何其他十六进制转储工具)来查看其中的实际内容。
但不能仅在特定服务器上执行。
如果PLUGIN
是从文件中读取一行的结果,那么该文件可能是该服务器上的Windows / DOS格式(带有回车/换行结尾)而不是Unix格式(仅限换行) )。