मुझे वास्तव में @ मिचेल सुझाव पसंद है। कभी-कभी, आप BASH का उपयोग करके उस विशिष्ट सर्वर में किसी कार्य को निष्पादित करने के लिए वास्तव में सिर्फ कुछ चर मान निकाल सकते हैं। तो, वांछित चर पता है। इस दृष्टिकोण का उपयोग कर प्रति चर मान निर्धारित करने के लिए या एकाधिक कॉल से बचने या यहां तक कि कई चर के साथ रीड स्टेटमेंट का उपयोग करने का तरीका है जिसमें कुछ मान्य और खाली हो सकते हैं, जिससे मूल्य शिफ्ट हो सकता है (यह मेरी समस्या थी)
मेरे पिछले दृष्टिकोण से लीड वैल्यू शिफ्ट एरर आएगी, अगर .svID [] .ID = "" ( sv को स्लॉट की वैल्यू मिलेगी)
-rd '\n' getInfo sv slotID <<< $(jq -r '(.infoCMD // "no info"), (.svID[].ID // "none"), (._id // "eeeeee")' <<< $data)
यदि आपने कर्ल का उपयोग करके ऑब्जेक्ट डाउनलोड किया है, तो मेरा दृष्टिकोण कुछ वैरिएबल को एक अनुकूल नाम में बदलने के लिए है क्योंकि डेटा सरणियों से डेटा निकालें।
eval और फिल्टर्स का उपयोग करने से समस्या एक लाइन से हल हो जाएगी और वांछित नाम के साथ चर का उत्पादन होगा
eval "$(jq -r '.[0] | {varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
इस मामले में लाभ, यह तथ्य है कि यह पहले चरण में सभी वांछित चर को फ़िल्टर, नाम बदलने, प्रारूपित करेगा। निरीक्षण करें कि वहाँ है। [0] | अगर GET का उपयोग करके RESTFULL API सर्वर से स्रोत, प्रतिक्रिया डेटा के रूप में है तो यह होना बहुत आम है:
[{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}]
यदि आपका डेटा किसी सरणी से नहीं है, अर्थात। एक वस्तु की तरह है:
{"varNameExactasJson":"this value", "var1toBeRenamed: 1500, ....}
बस प्रारंभिक सूचकांक निकालें:
eval "$(jq -r '{varNameExactasJson, renamedVar1: .var1toBeRenamed, varfromArray: .array[0].var, varValueFilter: (.array[0].textVar|ascii_downcase)} | to_entries | .[] | .key + "=\"" + (.value | tostring) + "\""' <<< /path/to/file/with/object )"
यह एक पुराना सवाल है, लेकिन मैंने इसे साझा करना महसूस किया, क्योंकि इसे खोजना मुश्किल था
declare -- “$key=$value”
और$AUTHOR
आदि को अप्रत्यक्ष कर सकते हैं । यह अभी भी विकसित होने की तुलना में अधिक सुरक्षित है, हालांकि बदलनाPATH
या कुछ अभी भी इस संस्करण की तुलना में बहुत कम संभव है।