例如以下命令
gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
使用 GNUPLOT 5.4p5 在 Windows 10 上完美运行。但在我的带有 GNUPLOT 5.4p1 的 Debian Bullseye 盒子上,我得到的只是以下错误:
line 0: undefined variable:
运行不带参数的 GNUPLOT 并从 GNUPLOT 命令提示符执行相同的命令可以按预期工作;出现一个带有绘图的窗口。
这是某种命令行解析问题,还是与字符集/区域设置有关?
答案1
回答我自己的问题,因为我终于弄清楚问题是什么:UTF-8 不间断空格序列 ( c2 a0
)。
我在另一个 Debian Bullseye 系统上运行相同的命令,得到的结果略有不同:
line 0: undefined function: sin
这让它看起来更加可疑,因为该系统与我之前尝试过的系统相同。另外,之前的虚假空间sin
表明这是与解析/字符编码相关,而不是错误的语法或其他东西。
]
我尝试删除和之间的空格(并重新键入),sin
这解决了问题。
为了确认我没有疯,我将终端输出复制到一个文本文件中log.txt
:
% cat log.txt
% gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
line 0: undefined function: sin
% gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)"
(plot window appears and disappears)
并用 hexdump 转储它:
% hexdump -C log.txt
00000000 25 20 67 6e 75 70 6c 6f 74 20 2d 65 20 22 73 70 |% gnuplot -e "sp|
00000010 6c 6f 74 20 5b 78 3d 2d 33 3a 33 5d 20 5b 79 3d |lot [x=-3:3] [y=|
00000020 2d 33 3a 33 5d c2 a0 73 69 6e 28 78 29 2a 63 6f |-3:3]..sin(x)*co|
00000030 73 28 79 29 22 0a 6c 69 6e 65 20 30 3a 20 75 6e |s(y)".line 0: un|
00000040 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e |defined function|
00000050 3a 20 c2 a0 73 69 6e 0a 25 20 67 6e 75 70 6c 6f |: ..sin.% gnuplo|
00000060 74 20 2d 65 20 22 73 70 6c 6f 74 20 5b 78 3d 2d |t -e "splot [x=-|
00000070 33 3a 33 5d 20 5b 79 3d 2d 33 3a 33 5d 20 73 69 |3:3] [y=-3:3] si|
00000080 6e 28 78 29 2a 63 6f 73 28 79 29 22 0a |n(x)*cos(y)".|
0000008d
这有助于查明罪魁祸首:
00000020 .. .. .. .. .. c2 a0 ..
答案2
使用您的命令并按照 Gnuplot 手册:
-e“command”告诉 gnuplot 在继续之前执行该单个命令。
“继续”意味着 Gnuplot 期望提供文件并等待它。在命令末尾添加一个简单的连字符,使 Gnuplot 明白,它应该期望来自 stdin 的输入,而不是加载输入文件。在执行您提供的命令后,它还会将您带入交互式 shell 环境。
$ gnuplot -e "splot [x=-3:3] [y=-3:3] sin(x)*cos(y)" -
gnuplot>
[我不代表这里的情节输出,以使这篇文章尽可能轻松。]