বাশ অ্যারের মানগুলি উল্লেখ করার সময় @ এবং * এর মধ্যে পার্থক্য কী?


15

এই বাশ গাইড বলেছেন:

যদি সূচক নম্বর @ বা * হয় তবে একটি অ্যারের সমস্ত সদস্য রেফারেন্স করা হয়।

আমি যখন এটি করি:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
  echo "example.$i "
done

দেয়: example.1 example.2 example.3(পছন্দসই ফলাফল)।

তবে আমি যখন ব্যবহার করি তখন পরিবর্তে ${LIST[*]}পাই getexample.1 2 3

কেন?

সম্পাদনা করুন: প্রিন্টফ ব্যবহার করার সময় @ এবং * আসলে একই ফলাফল দেয়।


এটা আমার জন্য কাজ বলে মনে হচ্ছে। আমি @ এবং * উভয়ই চেষ্টা করে দেখেছি এবং এটি উভয় সময় একই ফল প্রকাশ বলে মনে হচ্ছে। আপনি কোন শেল ব্যবহার করছেন? echo $SHELLআপনার প্রশ্নের আউটপুট চালান এবং আটকান।
রমেশ

আমার উদাহরণটি ভুল ছিল, এটি কেবলমাত্র সাথে ঘটেছিল echo, সাথে হয় না printf, আমি কেবল লক্ষ্য করেছি।
আরজান


@ গোল্ডিলকস অন্য প্রশ্নটি সম্পর্কে $*এবং $@। যদিও, উত্তরটি একই রকম হবে এবং একটি প্রশ্ন অন্যটির উপসেট হিসাবে বিবেচিত হতে পারে, তারা পৃথক প্রশ্ন।
স্টাফেন চেজেলাস

উত্তর:


17

পার্থক্যটি সূক্ষ্ম; "$ *" একটি আর্গুমেন্ট তৈরি করে, যখন "$ @" আলাদা আর্গুমেন্টে প্রসারিত হবে, সুতরাং:

LIST=(1 2 3)
for i in "${LIST[@]}"; do
 echo "example.$i"
done

একাধিক ভেরিয়েবল হিসাবে তালিকাটি মুদ্রণ করবে (এটি মুদ্রণ করবে)

কিন্তু

LIST=(1 2 3)
for i in "${LIST[*]}"; do
 echo "example.$i"
done

তালিকাটি এক পরিবর্তনশীল হিসাবে মোকাবেলা করবে।


আপনি কি জানেন যেখানে মধ্যে পার্থক্য না echoএবং printfথেকে আসে? কারণ printfলুপের সাথে, * তালিকা রেফারেন্সটিকে একাধিক ভেরিয়েবল হিসাবে বিবেচনা করা হয়।
আরজান

একের সাথে একাধিক ভেরিয়েবল হিসাবে আচরণ করার অর্থ কী? আমি ভাবছি যদি আপনি পার্থক্যটি বর্ণনা করার জন্য ব্যবহারিক উদাহরণ সরবরাহ করতে পারেন।
ফ্রেঞ্চ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.