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