चर बनाएं और लूप (बैश) के माध्यम से मान असाइन करें


12

क्या बैश चर बनाने और उन्हें लूप के माध्यम से मान प्रदान करने का एक तरीका है?

की तर्ज पर कुछ:

#!/bin/bash

c=0
for file in $( ls ); do
    var"$c"="$file";
    let c=$c+1;
done

संपादित करें: यह इंगित करने के लिए @Costas और @mdpc के लिए धन्यवाद एक सूची के लिए एक खराब विकल्प होगा; सवाल केवल सैद्धांतिक है।


1
नोट: ध्यान रखें कि आपका सेटअप केवल वर्तमान प्रक्रिया में परिवर्तन / संशोधन / असाइन करेगा और यदि आप इसे एक कमांड के रूप में निष्पादित करते हैं, तो मूल प्रक्रिया नहीं। आप 'का उपयोग करके फ़ाइल को स्रोत बना सकते हैं।' वर्तमान प्रक्रिया के भीतर ऐसा करने के लिए कमांड (EX: new_vars)।
mdpc

ठीक है, लेकिन ऊपर काम वास्तव में नहीं चलता है; var"$c"इसे तोड़ता है। @ कोस्टस का उत्तर दर्शाता है कि एक ही सूची चर के लिए कई मान कैसे निर्दिष्ट करें - मैं सिर्फ सैद्धांतिक रूप से पूछ रहा हूं कि क्या चर वास्तव में एक लूप के साथ उत्पन्न हो सकते हैं ।
टॉक्सिफा

हम्म् ... इतना जटिल क्यों, बस एक नए चर का उपयोग करके इसे बिना किसी धूमधाम के बनाता है।
mdpc

जवाबों:


14

खैर, आप पूरी तरह से eval का उपयोग कर सकते हैं:

c=0
for file in $( ls ); do
    eval "var$c=$file";
    c=$((c+1));
done

यह कोड var0 नाम के वैरिएबल बनाएगा, var1, var2, ... हर एक के साथ फाइल का नाम रखेगा। मुझे लगता है कि आप एक अच्छा कारण है कि आप एक सरणी का उपयोग करना चाहते हो जाएगा ...


5

संभव आप सरणी का मतलब है। मान निर्दिष्ट करने के कुछ तरीके हैं

प्रथम:

c=0
for file in $( ls ); do
    var[$c]="$file";
    c=$(($c+1));
done

दूसरा:

c=0
for file in $( ls ); do
    var[c++]="$file";
done

तीसरा:

for file in $( ls ); do
    var[${#var}]="$file";
done

चौथा:

var=( $(ls) )

पांचवां

...

  1. उपयोग करने की कोई आवश्यकता नहीं है ls, बस *सभी फ़ाइलों के लिए डाल दिया गया है
  2. अंदर संकेत ommited किया जा सकता है[]$

धन्यवाद; मेरा प्रश्न वास्तव में व्यावहारिक रूप से अधिक सैद्धांतिक है। हालाँकि, जब मैं echo $varआपके ऊपर सूचीबद्ध आदेशों के साथ आता हूं तो मुझे केवल पहली फ़ाइल 'सूचीबद्ध' मिलती है ls। क्या मुझसे कुछ गलत हो रही है?
टॉक्सिफा

1
आप उत्पादन करने के लिए सभी सरणी उपयोग करने के लिए आपके पास चाहता है echo ${var[*]}(या ${var[@]}), एक तत्व की तरह कहा जा सकता है echo ${var[1]}। नोट: $varबराबर है${var[0]}
कोस्टास

1
@ py4on दूसरा तरीका एक लूप का उपयोग करना है:for v in "${var[@]}";do echo $v;done
कोस्टास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.