使用 plistbuddy 从 plist 中的字典中读取所有键

Read all keys from a dictionary which in plist using plistbuddy

我想使用 plistbuddy 从 plist 中的字典中读取所有键并将值推送到数组中。 我知道下面的实用程序有助于阅读 plist。 /usr/libexec/PlistBuddy

到目前为止,我正在对密钥进行硬编码以获得价值。 例如:theKey = "selva"

所以我写了下面的代码来获取上面键的值

val=$(function_stringFields "${theFile}" "${theKey}" "${index}")

function_stringFields 是自定义方法。)

有没有办法达到同样的效果。

plist_file=/Applications/iTunes.app/Contents/Info.plist
keys=(`/usr/libexec/PlistBuddy -c Print "$plist_file" | perl -lne 'print  if /^    (\S*) =/'`)

这将创建一个包含所有顶级键的数组 keys。它所做的只是寻找以四个空格开头然后是一个键然后是“=”的输出。

完成这项工作的关键是 plistbuddy 的打印选项。 如果没有参数,它将打印出所有行。

这是一个小脚本,它将加载键数组和值数组。

成功与否实际上取决于您在 plist 中构建的树类型。如果它是平坦的,你会更快乐。此示例也不考虑值中的空格(它们将被删除)。

LINES=`/usr/libexec/PlistBuddy FrameworkList.plist -c print | grep = | tr -d ' '`

COUNTER=0

for PLIST_ITEMS in $LINES;
do
  KEY[${COUNTER}]=`echo $PLIST_ITEMS | cut -d= -f1`
  VALUE[${COUNTER}]=`echo $PLIST_ITEMS | cut -d= -f2`
  COUNTER=${COUNTER}+1
done