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

playerctl状态判断失效:匹配"Paused"时无法进入if分支

问题分析与解决

你的脚本始终无法进入if分支,主要是这几个原因导致的,对应修正方法如下:

1. 正则匹配的引号使用错误

在bash的[[ =~ ]]正则匹配语法里,给匹配字符串加双引号会让bash把整个带引号的内容当作字面量处理——也就是你现在的代码是在找输出里有没有"Paused"(包含双引号),但playerctl返回的是不带引号的Paused,自然永远匹配不上。

把匹配条件改成不带引号的形式:

if [[ $output =~ Paused ]];

2. 输出可能包含多余空白字符

有时候playerctl的输出会附带换行、空格或制表符,这些隐形字符会干扰匹配。可以在获取输出时用xargs过滤掉多余空白:

output=$(playerctl status -p spotify | xargs)

修正后的完整脚本

output=$(playerctl status -p spotify | xargs)
echo $output
if [[ $output =~ Paused ]];
then
    polybar-msg hook spotify-play-pause 1 #  
else
    polybar-msg hook spotify-play-pause 2 # 
fi
playerctl play-pause -p spotify

另外,你可以手动执行playerctl status -p spotify确认返回的状态是Paused还是小写的paused,如果是小写,就把匹配条件改成paused即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:02