बैश: स्थितिगत मापदंडों का टुकड़ा


20

कैसे मैं $@पहली बार इस तरह के एक और सरणी के लिए सभी स्थितीय मापदंडों की नकल करने के बिना बैश का एक टुकड़ा प्राप्त कर सकते हैं ?

argv=( "$@" )
echo "${argv[@]:2}";

1
हमेशा बोली "$@"argvयदि किसी भी आर्गन में रिक्त स्थान है तो आप असाइनमेंट तोड़ देंगे।
जोर्डनम

जवाबों:


31

आप किसी अन्य सरणी के लिए उसी प्रारूप का उपयोग कर सकते हैं। 2 और 3 तत्वों को निकालने के लिए $@, आप यह करेंगे:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
लेकिन यह v4.1.2 में चार्ट के आधार पर एक चार्ट पर काम करने के लिए लगता है, क्या यह शब्द के आधार पर एक शब्द पर करने का एक तरीका है?
एलेक्सज मगुरा

@AlexejMagura मुझे समझ नहीं आ रहा है कि आपका क्या मतलब है। यह ऐरे के तत्वों पर कार्य करता है। यदि आपके पास एक-वर्ण तत्व हैं, तो यह "वर्णों पर" काम करेगा। यदि प्रत्येक तत्व एक शब्द है, तो यह शब्दों पर काम करता है। आप शायद एक स्ट्रिंग पर यह कोशिश कर रहे हैं और एक सरणी नहीं?
terdon

मैं इसे "$ @" की एक प्रति पर आज़मा रहा हूं, जो मुझे लगता है कि उस बिंदु पर एक स्ट्रिंग बन सकता है, मुझे यकीन नहीं है।
एलेक्सज मगुरा

बैश 4.2.46 पर, "${@:1:2}"वास्तव में मुझे 1 और 2 कमांड लाइन तर्क देता है । इस बीच, "${@:1}"मुझे पूर्ण कमांड लाइन तर्क"${@:0}" देता है , और मुझे स्क्रिप्ट नाम देता है जिसके बाद पूर्ण कमांड लाइन तर्क दिया जाता है
रॉकलाईट

@ अच्छी तरह से, हाँ। $@ सरणी के 2 और 3 तत्व 1 और 2 तर्क हैं। "${@:1}"2 तत्व (1 तर्क) ${@:0}से शुरू होने वाले पूरे सरणी और 1 तत्व से शुरू होने वाले पूरे सरणी को प्रिंट करेगा जो स्क्रिप्ट का नाम है। आप क्या उम्मीद कर रहे थे
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.