मैं इसे एक शेल स्क्रिप्ट में देखता हूं।
variable=${@:2}
यह क्या कर रहा हैं?
var="my_value"; echo var="${var[@]:2}"; echo "$var"फर्क देखें?
मैं इसे एक शेल स्क्रिप्ट में देखता हूं।
variable=${@:2}
यह क्या कर रहा हैं?
var="my_value"; echo var="${var[@]:2}"; echo "$var"फर्क देखें?
जवाबों:
यह $@बैश में, विशेष चर की सामग्री दिखा रहा है । इसमें सभी कमांड लाइन तर्क हैं, और यह कमांड दूसरे से सभी तर्कों को ले रहा है और उन्हें एक चर में संग्रहीत कर रहा है variable।
यहां एक परीक्षा की पटकथा है।
#!/bin/bash
echo ${@:2}
variable=${@:3}
echo $variable
उदाहरण रन:
./ex.bash 1 2 3 4 5
2 3 4 5
3 4 5
vars=( "${@:2}" )
$@और ${@}समान हैं, हालांकि उत्तरार्द्ध "अधिक सही" सिंटैक्स है। आपको कोष्ठक का उपयोग करना होगा ${@:2}, क्योंकि $@:2अस्पष्ट है और इसलिए इसकी व्याख्या की जाएगी ${@}:2, जो कि समान बात नहीं है।
यह हाल के संस्करणों kshमें भी पाया गया है bashऔर एक विशेषता है zsh।
में kshऔर bash, आप का उपयोग करके एक सरणी के कई तत्वों का उपयोग कर सकते ${array[@]:first:length}वाक्य रचना है, जो करने के लिए अप करने के लिए फैलता है length(या सभी करता है, तो lengthछोड़ दिया जाता है) के तत्वों arrayसरणी (सरणी के तत्वों की सूची में अनुक्रमित पर संख्यानुसार क्रमबद्ध), के साथ शुरू सूचकांक के साथ पहले वाला अधिक या उसके बराबर first। जब स्केलर के संदर्भ में (जैसे एक स्केलर चर के लिए एक असाइनमेंट में) तत्वों की सूची अंतरिक्ष वर्णों के साथ bashऔर (या खाली होने पर खाली या अंतरिक्ष कुछ भी नहीं है) ksh93के पहले चरित्र के साथ जुड़ जाती है ।$IFS$IFSzsh
उदाहरण के लिए:
$ a[23]=a a[5]=b a[235]=c a[45]=d
$ x=${a[@]:12:2}; printf '<%s>\n' "$x"
<a d>
$@एक विशेष मामला है। $@स्थितीय मापदंडों का सरणी है ( $1, $2...)। लेकिन जब इसका उपयोग किया जाता है :, तो $0इसे भी शामिल किया जाता है। तो ${@:1}वही है $@, ${@:0}अन्य सरणियों के लिए पसंद नहीं है ।
में zsh, यह थोड़ा अलग है। सिंटैक्स को केवल संगतता के लिए हाल ही में zshजोड़ा गया है kshलेकिन तत्वों की श्रेणियों के चयन के लिए इसका अपना सिंटैक्स है।
के विपरीत kshऔर bash, zshसरणियों अदिश चर से एक अलग चर प्रकार के होते हैं, विरल नहीं हैं ( zshएक और चर प्रकार के रूप में साहचर्य सरणियों है) और सूचकांक 1 के बजाय 0 पर शुरू करते हैं।
के लिए zsh, आप ऐरे एलीमेंट रेंज तक पहुँचते हैं $a[first,last](जहाँ lastअंत से पीछे की ओर गिनने के लिए नकारात्मक भी हो सकते हैं)।
में zsh,
a[23]=a a[5]=b a[235]=c a[45]=d
235 तत्वों के साथ एक सरणी बनाता है, उनमें से अधिकांश खाली हैं। $a[12,50]12 से 50 तक तत्वों का विस्तार करेगा, और ${a[@]:12:2}केवल (खाली) $a[12]और $a[13]तत्वों तक विस्तार करेगा । एक विशेष मामले के रूप में, और फिर से पोर्टेबिलिटी के लिए ksh93और bash, के रूप में zshभी उस के 0लिए एक पहला तत्व स्वीकार $@करता है $0।
तो, आप उपयोग कर सकते हैं ${a[@]:x:n}और ${@:x:n}portably सभी 3 गोले भर में है, लेकिन केवल गैर विरल सरणियों, और भारतीय विदेश सेवा के मूल्य के भुगतान के लिए ध्यान।