การอ่านค่าจากพจนานุกรมที่ซ้อนกัน plist ในเชลล์สคริปต์


10

ฉันมีไฟล์ plist และฉันสนใจดึงค่าจากพจนานุกรมที่ซ้อนกันโดยใช้เชลล์สคริปต์ นี่คือโครงสร้างของไฟล์ 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>

ฉันสนใจดึงค่าที่กำหนดให้กับปุ่ม "เมืองหลวง" หากผู้ใช้ระบุชื่อประเทศ
เช่นถ้าฉันรันคำสั่งต่อไปนี้ฉันจะได้รับข้อมูลที่สมบูรณ์ภายใต้พจนานุกรม "ประเทศ"

defaults read "/Users/sameerp/Downloads/data" Countries  2>&1   

ฉันได้รับผลลัพธ์ต่อไปนี้:

{
Italy =     {
    Capital = Rome;
    Continent = Europe;
};
USA =     {
    Capital = "Washington DC";
    Continent = "North America";
};
}

ฉันจะแก้ไขคำสั่งด้านบนเพื่อส่งผ่านรหัส "ประเทศ" (เช่น USA) และดึงค่าสำหรับคีย์ "เมืองหลวง" ได้อย่างไร


ดังนั้นคำถามของคุณคืออะไร จนถึงตอนนี้คุณมีอะไร คุณไม่ได้ขอให้เราเขียนสคริปต์ให้คุณใช่มั้ย
terdon

@terdon: ฉันไม่ได้ขอให้ทุกคนเขียนสคริปต์ให้ฉัน ฉันต้องการทราบว่ามีวิธีโดยตรงในการเข้าถึงค่าของคีย์ในพจนานุกรมที่ซ้อนกันโดยใช้คำสั่ง "ค่าเริ่มต้นอ่าน"
smokinguns

คำตอบ:


13

ค่าเริ่มต้นไม่สามารถทำได้โดยไม่เกิดความวุ่นวาย แต่ PlistBuddy จะ:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.