osascript使用带空格的bash变量

时间:2014-05-28 22:39:13

标签: bash variables syntax applescript osascript

我在Bash中使用osascript通过Apple Script在通知中心(Mac OS X)中显示消息。我试图将文本变量从Bash传递给脚本。对于没有空格的变量,这可以正常工作,但不适用于带空格的变量:

定义

var1="Hello"
var2="Hello World"

并使用

osascript -e 'display notification "'$var1'"'

有效,但使用

osascript -e 'display notification "'$var2'"'

产量

syntax error: Expected string but found end of script.

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

2 个答案:

答案 0 :(得分:18)

您可以尝试使用:

osascript -e "display notification \"$var2\""

或者:

osascript -e 'display notification "'"$var2"'"'

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

# 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提供这个非常有用的建议!

答案 1 :(得分:11)

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

osascript \
  -e "on run(argv)" \
  -e "return display notification item 1 of argv" \
  -e "end" \
  -- "$var2"

...或者,如果一个人更喜欢在stdin上传递代码而不是argv:

osascript -- - "$var2" <<'EOF'
  on run(argv)
    return display notification item 1 of argv
  end
EOF