शेल स्क्रिप्ट में स्पेस के पहले और बाद में स्ट्रिंग को कैसे विभाजित किया जाए?


19

मैं एक चर है जो इस तरह से प्रतिध्वनित पर दिखाता है

$ echo $var
129 148

मुझे आउटपुट के रूप में केवल 129 लेना है। मैं 129 और 148 को कैसे विभाजित करूंगा?


echo "${var% *}" && echo "${var#* }"...
जसोनव्रीयन

जवाबों:


33

Jasonwryan के सुझाव के अलावा , आप इसका उपयोग कर सकते हैं cut:

echo $var | cut -d' ' -f1

ऊपर cutरों echoएक अंतरिक्ष सीमांकक के साथ निर्गम (-d ' ' ) और आउटपुट पहले क्षेत्र ( -f1)


यह काम नहीं कर रहा है। मैंने पहले से ही इसका इस्तेमाल किया है। यह कहता है कि कमांड नहीं मिला।
सुरभि

3
@ सुरभि क्या कहती है कमान नहीं मिली? cutएक मानक उपयोगिता है। आपकी स्क्रिप्ट में कहीं और त्रुटि है। अधिक आम तौर पर, यह कभी नहीं कहा "यह काम नहीं कर रहा है"। हमेशा यह कहें कि आप कौन सा कोड चलाते हैं, वास्तव में क्या हुआ है, और त्रुटि संदेश कॉपी-पेस्ट करें।
गिल्स एसओ- बुराई को रोकना '

यह उत्तर स्वीकार किया जाना चाहिए, क्योंकि यह सबसे संक्षिप्त और प्रत्यक्ष तरीका है। यह उन मामलों में काम नहीं करेगा जो दिए गए उदाहरण से अधिक जटिल हैं, निश्चित रूप से।
डैन गुयेन

10

ऐसा करने का एक साफ तरीका यह है कि रिक्त स्थान पर एक स्ट्रिंग को विभाजित करने के लिए बैश सरणी का उपयोग किया जाए। आप केवल कोष्ठक का उपयोग करके एक सरणी घोषित कर सकते हैं:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

यह कहता है कि कमांड नहीं मिला
surbhi

यह बैश का उपयोग करने पर आप पर निर्भर करता है। यदि आप एक अलग शेल का उपयोग कर रहे हैं तो यह काम नहीं कर सकता है। echo $SHELLदिखाना चाहिए: /bin/bashया समान।
गोगुड़

में काम नहीं करता है zsh;
टोनी एचएच

यह ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
टोनी एचएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.