You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中存储\$并执行包含该符号的Linux终端命令?

解决R中system命令转义错误的方案

这个错误的根源其实是R的字符串转义规则和shell的转义规则冲突了:在R里,反斜杠\是转义字符,当你写\$时,R会尝试解析这个转义序列,但R根本不认识\$这种写法,所以直接报错。我们需要让R把\$和其他特殊字符正确传递给shell,同时不触发R的转义错误。

下面给你两种可行的解决方法:

方法1:手动转义特殊字符

在R的字符串里,要传递一个反斜杠给shell,得写两个反斜杠\\(第一个用来转义第二个);如果用单引号包裹整个shell命令,里面的单引号要转成\';用双引号包裹的话,里面的双引号要转成\"。

比如用单引号包裹shell命令的写法:

system('echo "GPU0=\\$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | awk \'NR==1{print$1/100}\')" >> test.txt')

这里:

  • \\$会被R解析成\$,shell收到后会把$当成普通字符,不会执行命令替换,就能把$(nvidia-smi ...)原样写入文件;
  • \'会被R解析成',保证awk命令的单引号能被shell正确识别。

或者用双引号包裹shell命令的写法:

system("echo \"GPU0=\\$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | awk 'NR==1{print$1/100}')\" >> test.txt")

方法2:用R原生字符串(推荐,R 4.0+支持)

从R 4.0版本开始,支持原生字符串语法r"(...)"——在这种字符串里,所有特殊字符(反斜杠、美元符号、单/双引号)都不需要转义,R会直接把内容原样传给shell,写法简洁又不容易出错:

system(r'(echo "GPU0=\$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | awk 'NR==1{print$1/100}')" >> test.txt)')

验证结果

执行任意一种命令后,打开test.txt就能看到你想要的脚本内容:

GPU0=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | awk 'NR==1{print$1/100}')

内容的提问来源于stack exchange,提问作者clee165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:07:13