Bash/Osascript Error: unexpected EOF while looking for matching `)'

Bash/Osascript Error: unexpected EOF while looking for matching `)'

我正在使用 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)

然而,命令行returns错误是它走到文件末尾而没有找到匹配的')'。但是,当我没有将 bash 变量分配给 osascript 输出时,一切正常,所以我知道这不是 AppleScript 部分的问题。我 运行 shellcheck,它没有检测到任何错误,其他解决方案似乎与未闭合的引号或未转义字符有关,但我似乎没有那个问题。很明显,这是因为试图将它分配给一个 bash 变量,但对于我来说,我不知道我做错了什么。感谢您的帮助。

你有没有想过你正在使用 bash 变量 ($noSplitString);将其插入到使用 / 作为分隔符拆分文本的 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(其中 表示 space 字符)。可以在这篇文章中阅读更多内容:Bash IFS: its Definition, Viewing it and Modifying it