从 shell 脚本中的 plist 嵌套字典中读取值

smo*_*uns 11 shell-script dictionary plist macos

我有一个 plist 文件,我对使用 shell 脚本从嵌套字典中获取值很感兴趣。这是我的 plist 文件的结构:

<dict>
    <key>Countries</key>
    <dict>
        <key>USA</key>
        <dict>
            <key>Capital</key>
            <string>Washington DC</string>
            <key>Continent</key>
            <string>North America</string>
        </dict>
        <key>Italy</key>
        <dict>
            <key>Capital</key>
            <string>Rome</string>
            <key>Continent</key>
            <string>Europe</string>
        </dict>
    </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)

如果用户提供国家/地区名称,我有兴趣获取分配给“Capital”键的值。
例如,如果我执行以下命令,我会在“国家/地区”字典下获得完整的数据。

defaults read "/Users/sameerp/Downloads/data" Countries  2>&1   
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

{
    Italy = {
        Capital = Rome;
        Continent = Europe;
    };
    USA = {
        Capital = "Washington DC";
        Continent = "North America";
    };
}
Run Code Online (Sandbox Code Playgroud)

如何修改上面的命令以将“国家”键(例如美国)传递给它并获取“资本”键的值?

Gor*_*son 14

默认值无法做到这一点而没有很多混乱,但 PlistBuddy 会:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Run Code Online (Sandbox Code Playgroud)