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


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.