将 bash 列表传递到 applescript(使用 osascript)

Pass bash list into applescript (using osascript)

我正在尝试将 bash 列表传递给 applescript 变量,但它无法通过常规方法工作。

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

set applescriptList to "$bashList"

这适用于我尝试通过 osascript 传递到 applescript 变量的任何其他数据结构但是,当我记录列表中的第一项时,而不是在此示例中 returning 终端,它会 return 字母 "T"。同样,如果我记录第二个项目,它 return 是字母 "e" 而不是实用程序,因此看起来每个单独的字符都是列表中的一个项目。

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

我假设 'bash list' 你的意思是多行文本,在这种情况下使用 paragraphs of bashList 在换行符处拆分它。

鉴于此:

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 输出,所以花括号会丢失,并且不容易区分列表和包含几个逗号的字符串。