বাশের একটি শব্দ থেকে "শব্দ" এর একটি অ্যারে যান


11

আমাকে একটি স্ট্রিং থেকে একটি অ্যারে যেতে হবে যেখানে প্রতিটি এন্ট্রি সেই স্ট্রিংয়ের প্রতিটি শব্দ। উদাহরণস্বরূপ:

VotePedro="Vote for Pedro"

আমার অ্যারে দরকার:

Vote
For
Pedro

যা আমার এরপরে পুনরাবৃত্তি করতে সক্ষম হওয়া উচিত:

for i in "${votePedroArray[@]}"
    do
    ## Do something
    done

উত্তর:


11
VotePedro="Vote for Pedro"
votePedroArray=(${VotePedro})

বন্ধনী এবং বন্ধনীগুলি কী বোঝাতে পারে? আমি বেসে নতুন এবং কেন এটি কাজ করবে তা বুঝতে চাই।
farid99

1
অ্যারে সাধারণত বন্ধনী ব্যবহার করে ঘোষণা করা হয়। উদাহরণস্বরূপ votePedroArray=("Vote" "For" "Pedro")আপনি 3 দৈর্ঘ্যের অ্যারে দিতে হবে । এবং এই প্রসঙ্গে ${VotePedro}যেমন একই $VotePedro। স্বতন্ত্র অ্যারে উপাদানগুলিতে অ্যাক্সেস করতে, আপনি আপনার প্রশ্নের লুপের জন্য যা ছিল তার অনুরূপ বন্ধনী ব্যবহার করতে পারেন। উদাহরণস্বরূপ ${votePedroArray[0]}অ্যারেতে প্রথম উপাদান (এই উদাহরণের জন্য "ভোট")
এয়ারফিশে

আপনার উত্তরের জন্য ধন্যবাদ. আমি upvote হবে কিন্তু আমার এখনও যথেষ্ট খ্যাতি নেই।
farid99

2
এবং তাদের উপর পুনরাবৃত্তি করতে: for {VotPedroArray [@]} ভোটের জন্য; প্রতিধ্বনি করুন $ ভোট; সম্পন্ন
নীল ম্যাকগিল

4

আপনি যখন কোনও পরিবর্তনশীল প্রসার ছাড়েন নিঃসৃত, উদাহরণস্বরূপ $VotePedro, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করা হয়:

  1. ভেরিয়েবলের মান সন্ধান করুন।
  2. হোয়াইটস্পেসের প্রতিটি ব্লকের মানকে স্ট্রিংয়ের তালিকায় বিভক্ত করুন। আরও সাধারণভাবে, বিভাজকগুলি IFSভেরিয়েবলের মানটির অক্ষর ; ডিফল্টরূপে সেই স্থান, ট্যাব এবং নিউলাইন।
  3. তালিকার প্রতিটি উপাদানকে একটি ওয়াইল্ডকার্ড প্যাটার্ন হিসাবে ব্যাখ্যা করুন; প্রতিটি উপাদানগুলির জন্য, যদি প্যাটার্নটি কিছু ফাইলের সাথে মিলে যায় তবে ফাইলের নামের সাথে তাল মিলিয়ে সেই উপাদানটি প্রতিস্থাপন করুন।

সুতরাং আপনি IFSওয়াইল্ডকার্ড সম্প্রসারণ বন্ধ করে এবং একটি ভেরিয়েবল প্রসারিত করে কোয়েনের বাইরের স্ট্রিংটি প্রসারিত করে হোয়াইটস্পেস-সীমাবদ্ধ উপাদানগুলিতে (এর ডিফল্ট মান ধরে নেওয়া ) একটি স্ট্রিং বিভক্ত করতে পারেন ।

VotePedro="Vote for Pedro"
set -f
votePedroArray=($VotePedro)
set +f
for i in "${votePedroArray[@]}"; do 

আপনি সরাসরি ব্যবহারের স্থানে বিভাজন করতে পারেন; এটি এমনকি শ এর মতো শেলগুলিতেও কাজ করবে যেমন অ্যারে নেই:

VotePedro="Vote for Pedro"
set -f
for i in ${votePedro}; do
  set +f
  
done
set +f

0

এটি ভাঙার পাশাপাশি $IFSআপনি যা চান তা কেবল এটি ভেঙে ফেলতে পারেন:

set ''
while case $var in
      (* *) ;; (*)
      ! a=("$var$@")
      esac
do    set '' "${var##* }$@"
      var=${var% "$2"}
done

... যা শ্বেত স্পেসকে পৃথক নাল ক্ষেত্র এমনকি এমনকি অনুমতি দেবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.