我正在使用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变量,但是对于我一生,我不知道自己在做什么错。感谢您的帮助。
答案 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