我正在尝试将bash列表传递到applescript变量,但是它无法通过常规方法工作。
我有一个看起来像[Terminal,Utilities,Finder,Launchpad]的列表。我通过声明将bash列表传递给applescript变量:
{
"rules": {
".read": "root.child('users').child(auth.uid).child('isAdmin').val() === true",
"users": {
"$uid": {
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
}
}
}
这可以与我尝试通过osascript传递到applescript变量的任何其他数据结构一起使用。但是,当我记录列表中的第一项时,而不是在此示例中返回Terminal,而是返回字母“ T” 。同样,如果我记录第二个项目,它将返回字母“ e”而不是实用程序,因此似乎每个单独的字符都是列表中的一个项目。
有人有将bash列表传递到applescript变量的经验吗?谢谢。
答案 0 :(得分:0)
我假设“ bash list”是指多行文本,在这种情况下,请使用paragraphs of bashList
在换行符处将其拆分。
答案 1 :(得分:0)
为此:
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输出,因此花括号丢失了,并且很难将列表与包含几个逗号的字符串区分开。