如何在Gnuplot的if代码块中使用!符号执行shell命令
问题原因
Gnuplot 中!开头的shell调用属于顶层交互式命令,不支持直接放在if、for这类嵌套代码块内部,因此会触发invalid command报错。
可行解决方法
方案1:使用官方推荐的system()函数(兼容性最好,所有版本均支持)
system()是Gnuplot专门提供的、用于在任意代码位置调用shell的内置函数,执行效果和!完全一致,修改后的代码如下:
datatype = 'full' if (datatype eq 'full') { # 执行shell命令,效果完全等价于!echo 'full' dummy = system("echo 'full'") } else { dummy = system("echo 'not full'") }
如果不需要接收shell命令的输出,赋值给dummy临时变量即可避免输出内容被打印到终端;如果需要捕获输出,直接用对应变量接收system()的返回值即可。
方案2:通过宏实现块内直接使用!符号(适配旧脚本书写习惯)
如果必须保留!的写法,可以通过Gnuplot的宏展开功能实现:
# 预先定义shell命令宏 define shell_cmd(cmd) "!".cmd datatype = 'full' if (datatype eq 'full') { @shell_cmd("echo 'full'") } else { @shell_cmd("echo 'not full'") }
两种方案均无需使用print替代,完全满足直接调用shell命令的需求。
内容的提问来源于stack exchange,提问作者ASarkar
相关产品推荐
相关产品推荐

