मैं इसे एक शेल स्क्रिप्ट में देखता हूं।
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
$IFS
zsh
उदाहरण के लिए:
$ 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 गोले भर में है, लेकिन केवल गैर विरल सरणियों, और भारतीय विदेश सेवा के मूल्य के भुगतान के लिए ध्यान।