Bash / Osascript错误:寻找匹配的`)'时出现意外的EOF

时间:2018-07-26 15:19:27

标签: bash applescript osascript

我正在使用osascript拆分字符串(以这种方式工作,不适用于bash),并将结果数组分配给bash变量,然后继续执行我的bash脚本。我这样做是这样的:

tempArrayApplications=$(osascript >/dev/null <<EOF
    set oldDelimiters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to "/"
    set theArray to every text item of "$noSplitString"
    set AppleScript's text item delimiters to oldDelimiters
    return theArray
EOF)

但是,命令行返回的错误是它到达文件末尾而没有找到匹配的')'。但是,当我不为osascript输出分配bash变量时,一切工作正常,因此我知道AppleScript部分没有问题。我运行了shellcheck,它没有检测到任何错误,其他解决方案似乎与未封闭的引号或未转义的字符有关,但我似乎没有这个问题。显然,这是由于尝试将其分配给bash变量,但是对于我一生,我不知道自己在做什么错。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您是否已暂停考虑要使用bash变量($noSplitString);将其插入到AppleScript中,该AppleScript使用/作为分隔符来分割文本;在bash命令(osascript)中执行此AppleScript;然后将其输出(实际上已被销毁)存储在另一个bash变量($tempArrayApplications)中...?

我倾向于完全删除AppleScript(无论如何,其5行中的3行都是多余的),然后从bash中的字符串创建数组。

因此,鉴于此:

noSplitString="item 1/item 2/item 3"

然后只需执行以下操作:

IFS='/'
tempArrayApplications=($noSplitString)

现在$tempArrayApplications将是一个包含三项的数组,从索引0开始到索引2结束。您可以echo在数组中像这样的特定元素:

echo "${tempArrayApplications[1]}" # "item 2"

IFS 是AppleScript text item delimiters的bash等效项。它通常具有默认值⎵\t\n(其中表示空格)。有关更多信息,请参见本文:Bash IFS: its Definition, Viewing it and Modifying it