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
相关产品推荐
相关产品推荐

