【问题标题】:Pass bash list into applescript (using osascript)将 bash 列表传递到 applescript(使用 osascript)
【发布时间】:2018-07-24 13:37:46
【问题描述】:

我试图将一个 bash 列表传递给一个 applescript 变量,但它不能通过传统方法工作。

我有一个类似于 [Terminal, Utilities, Finder, Launchpad] 的列表。我通过声明将 bash 列表传递给一个 applescript 变量:

set applescriptList to "$bashList"

这适用于我尝试通过 osascript 传递到 applescript 变量的任何其他数据结构但是,当我记录列表中的第一项时,在此示例中不是返回终端,而是返回字母“T” .同样,如果我记录第二个项目,它会返回字母“e”而不是 Utilities,因此每个单独的字符似乎都是列表中的一个项目。

有人有将 bash 列表传递到 applescript 变量的经验吗?谢谢。

【问题讨论】:

  • 您希望 bash 数组成为 AppleScript 中的数组还是字符串?你是如何建立这个列表的?

标签: bash applescript


【解决方案1】:

鉴于此:

bashList=(Terminal Utilities Finder Launchpad)

那么你可以这样做:

osascript -e "set ASlist to the paragraphs of \"$(printf '%s\n' "${bashList[@]}")\""

或者,考虑到上面需要转义的所有引号,阅读起来会更简单一些:

osascript <<OSA
    set ASlist to the paragraphs of "$(printf '%s\n' "${bashList[@]}")"
OSA

虽然,如果您知道bashList 中的每个项目仅包含一个单词,那么这就不需要printf

osascript <<OSA
    set ASlist to the words of "${bashList[@]}"
OSA

运行这些示例后,在 bash 中返回到 stdout 的结果将如下所示:

Terminal, Utilities, Finder, Launchpad

这是我所期望的。等效的 AppleScript 输出如下所示:

{Terminal, Utilities, Finder, Launchpad}

表示ASlist 被分配了一个值列表,用大括号表示。然而,这个列表在 bash 输出中的翻译效果很差,因此花括号会丢失,并且很难将列表与包含几个逗号的字符串区分开来。

【讨论】:

    【解决方案2】:

    我假设“bash 列表”是指多行文本,在这种情况下使用 paragraphs of bashList 在换行符处拆分它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      相关资源
      最近更新 更多