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

如何将字符串变量传入notify-send?Shell脚本参数传递问题

解决Shell脚本中notify-send传递字符串变量的问题

哈哈,我之前也踩过类似的坑,给你拆解下你遇到的两个错误,再给你靠谱的实现方法~

先说说你为啥会报错

第一个命令的问题

你写的$MESSAGE='Hello world!' notify-send "$MESSAGE" -t 1有两个致命错误:

  1. 变量赋值格式错了:如果要给当前命令临时设置环境变量,应该是变量名=值 命令,而不是$变量名=值——前面的$是用来读取变量的,赋值时不能加。
  2. 反引号 用错了:反引号的作用是执行里面的内容并返回输出,你写的"$MESSAGE"会把变量里的Hello world!当成命令去执行,Shell就会把Hello当成命令名,自然报错Hello command not found了。

第二个命令的问题

notify-send $MESSAGE -t 1的问题出在Shell的单词拆分:当你不用引号包裹变量时,Shell会把变量里的空格当作分隔符,把Hello world!拆成Hello和world!两个参数传给notify-send。而notify-send的默认用法是notify-send <标题> [内容],所以它会把Hello当成标题,world!当成内容,如果你本来只想把整个字符串作为标题(或内容),就会出现参数不符合预期的情况,看起来像是“参数过多”。

正确的实现方法

核心原则:用双引号包裹变量,避免Shell自动拆分参数,下面是几种常用场景:

场景1:单独赋值后使用(最清晰)

# 先给变量赋值
MESSAGE='Hello world!'
# 用双引号包裹变量传给notify-send
notify-send "$MESSAGE" -t 1

场景2:指定标题+内容

如果需要同时传标题和内容,两个变量都用双引号包裹:

TITLE='系统提示'
MESSAGE='Hello world!'
notify-send "$TITLE" "$MESSAGE" -t 1

场景3:一行内完成赋值+执行

如果不想单独写一行赋值,可以用&&连接,或者用临时环境变量的方式:

# 方式1:用&&串联命令
MESSAGE='Hello world!' && notify-send "$MESSAGE" -t 1

# 方式2:临时给当前命令设置环境变量(适合只给这一个命令用的情况)
MESSAGE='Hello world!' notify-send "$MESSAGE" -t 1

额外提醒

  • 永远记得用双引号包裹包含空格、特殊字符的变量,除非你明确希望Shell拆分它的内容。
  • 反引号 是用来执行命令的(比如date命令),不要用来引用变量,引用变量用双引号就够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:33