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

Bash脚本中GVariant字典转义问题:调用dconf修改显示缩放时执行出错

Bash脚本中GVariant字典转义问题:调用dconf修改显示缩放时执行出错

嘿,这个问题我之前也碰到过!核心是bash处理带复杂引号的命令时,直接把整个命令存成字符串变量会打乱原本的引号解析逻辑,导致dconf收到的参数格式不对,才会报那个“unterminated string constant”的错误。

给你两个靠谱的解决办法:

方法1:直接执行dconf命令(最推荐)

别把整个命令塞变量里,直接在脚本里写完整的dconf调用就行,这样bash能正确解析双引号包裹的GVariant字符串:

#!/bin/bash
dconf write /com/ubuntu/user-interface/scale-factor "{'DP-4': 7, 'eDP-1': 7}"

这样写的话,bash会把双引号里的整个{'DP-4': 7, 'eDP-1': 7}作为单一参数传给dconf,完全和你在命令行直接敲的效果一样。

方法2:用数组存储命令(适合需要复用命令的场景)

如果你确实需要把命令存起来后续复用,可以用bash数组来保存命令和每个参数,数组能完美保留每个参数的边界,不会破坏引号结构:

#!/bin/bash
# 把命令和每个参数分别存进数组
dconf_cmd=(dconf write /com/ubuntu/user-interface/scale-factor "{'DP-4': 7, 'eDP-1': 7}")
# 执行数组里的命令
"${dconf_cmd[@]}"

展开"${dconf_cmd[@]}"的时候,bash会把数组里的每个元素原样作为独立参数传给执行的命令,完全不会乱掉引号里的内容。

为啥原来的写法不行?

你原来把整个命令存成字符串变量cmd,执行$cmd时,bash会先把这个字符串按空格拆分,然后再处理引号——这时候里面的单引号和双引号的转义逻辑会被彻底打乱,dconf实际收到的参数是不完整的GVariant字符串,自然就报“未终止的字符串常量”错误了。

备注:内容来源于stack exchange,提问作者macho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 09:08:01