লুপ (ব্যাশ) এর মাধ্যমে ভেরিয়েবলগুলি তৈরি এবং মান নির্ধারণ করুন


12

বাশ ভেরিয়েবলগুলি তৈরি করার এবং লুপের মাধ্যমে সেগুলি মান নির্ধারণের জন্য কি কোনও উপায় আছে?

এর লাইন ধরে কিছু:

#!/bin/bash

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

সম্পাদনা: @ কাস্টাস এবং @ এমডিপিসি-কে আপনাকে ধন্যবাদ জানাতে যে এটি একটি তালিকার একটি দুর্বল বিকল্প হতে পারে; প্রশ্নটি কেবল তাত্ত্বিক।


1
দ্রষ্টব্য: সচেতন থাকুন যে আপনার সেটআপটি কেবলমাত্র বর্তমান প্রক্রিয়ায় পরিবর্তনগুলি পরিবর্তন / সংশোধন / নির্ধারণ করবে এবং আপনি যদি কমান্ড হিসাবে এটি কার্যকর করেন তবে পিতামাতার প্রক্রিয়াটি নয়। আপনি '' ব্যবহার করে ফাইলটি উত্স করতে পারেন। বর্তমান প্রক্রিয়াটির মধ্যে এটি ঘটানোর জন্য কমান্ড (প্রাক্তন: নতুন_ভারস) করুন।
এমডিপিসি

ঠিক আছে, তবে উপরেরটি আসলে কাজ করে না; 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
@ পাই 4 অন্যভাবে লুপটি ব্যবহার করা হচ্ছে:for v in "${var[@]}";do echo $v;done
কস্টাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.