通过shell脚本plist buddy从plist读取数组

Piy*_*ara 7 shell plist ios

我已经编写了从 plist 读取数组的 shell 脚本。

PLIST_PATH="./../Documentation/documentation.plist"
echo "PATH = $PLIST_PATH"
FILE_ARRAY=`/usr/libexec/PlistBuddy -c "print :'public-headers'" $PLIST_PATH`
Run Code Online (Sandbox Code Playgroud)

现在我想从这个数组中检索所有字符串,但我无法从这个数组中获取计数。

请帮忙。

Leo*_*Leo 5

安全的方法是使用索引的单独 Print 语句遍历数组,直到不再找到键为止。下面的脚本打印给定数组键和 plist 中的条目数

PLISTBUDDY="/usr/libexec/PlistBuddy -c"
if [ "$#" -ne 2 ]; then
  echo "usage: $0 <array key> <plistfile>"
  exit 1
fi
KEY=$1
PLIST=$2
i=0
while true ; do
   $PLISTBUDDY "Print :$KEY:$i" "$PLIST" >/dev/null 2>/dev/null
   if [ $? -ne 0 ]; then
      echo $i
      break
   fi
   i=$(($i + 1))
done
Run Code Online (Sandbox Code Playgroud)


Dar*_*pan 1

命令中的任何数组都将返回以下形式的数组 -

Array {
    1
    2
}
Run Code Online (Sandbox Code Playgroud)

sed将删除第一行和最后一行,所以这样 -

declare -a FILE_ARRAY =($(/usr/libexec/PlistBuddy -c "print :'public-headers'" $PLIST_PATH | sed -e 1d -e '$d'))
Run Code Online (Sandbox Code Playgroud)

你会得到1 2,你将其声明为数组FILE_ARRAY

您可以通过以下方式访问:${FILE_ARRAY[1]}

该数组的长度为 -echo ${#FILE_ARRAY[@]}

答案来源