首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >osascript使用带空格的bash变量

osascript使用带空格的bash变量
EN

Stack Overflow用户
提问于 2014-05-29 06:39:13
回答 2查看 19K关注 0票数 15

我正在使用Bash中的osascript通过苹果脚本在通知中心(Mac )显示一条消息。我正在尝试将一个文本变量从Bash传递给脚本。对于没有空格的变量,这很好,但对于有空格的变量就不行了:

定义

代码语言:javascript
复制
var1="Hello"
var2="Hello World"

并使用

代码语言:javascript
复制
osascript -e 'display notification "'$var1'"'

工作,但使用

代码语言:javascript
复制
osascript -e 'display notification "'$var2'"'

收益率

代码语言:javascript
复制
syntax error: Expected string but found end of script.

我需要改变什么(我是新手)?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 06:47:22

您可以尝试使用以下命令:

代码语言:javascript
复制
osascript -e "display notification \"$var2\""

或者:

代码语言:javascript
复制
osascript -e 'display notification "'"$var2"'"'

这修复了在bash中操作包含空格的变量的问题。然而,这种解决方案并不能防止osascript代码的注入。因此,最好选择Charles Duffy's solutions之一或使用bash参数扩展:

代码语言:javascript
复制
# if you prefer escape the doubles quotes
osascript -e "display notification \"${var2//\"/\\\"}\""
# or
osascript -e 'display notification "'"${var2//\"/\\\"}"'"'

# if you prefer to remove the doubles quotes
osascript -e "display notification \"${var2//\"/}\""
# or
osascript -e 'display notification "'"${var2//\"/}"'"'

感谢mklement0的这个非常有用的建议!

票数 30
EN

Stack Overflow用户

发布于 2014-05-29 06:53:41

与尝试使用字符串连接的变体不同,此版本是完全安全的,不会受到注入攻击。

代码语言:javascript
复制
osascript \
  -e "on run(argv)" \
  -e "return display notification item 1 of argv" \
  -e "end" \
  -- "$var2"

...or,如果你更喜欢在标准输入而不是argv上传递代码:

代码语言:javascript
复制
osascript -- - "$var2" <<'EOF'
  on run(argv)
    return display notification item 1 of argv
  end
EOF
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23923017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档