আমি একটি বাশ স্ক্রিপ্ট লিখছি যা রয়েছে set -uএবং খালি অ্যারে সম্প্রসারণে আমার একটি সমস্যা রয়েছে: ব্যাশটি প্রসারণের সময় একটি খালি অ্যারেটিকে একটি আনসেট ভেরিয়েবল হিসাবে দেখায়:
$ set -u
$ arr=()
$ echo "foo: '${arr[@]}'"
bash: arr[@]: unbound variable
( declare -a arrকোন সাহায্য করে না।)
এর সাধারণ সমাধান হ'ল ${arr[@]-}পরিবর্তে ব্যবহার করা, এভাবে ("অপরিজ্ঞাত") ফাঁকা অ্যারের পরিবর্তে একটি খালি স্ট্রিং স্থাপন করা। তবে এটি একটি ভাল সমাধান নয়, যেহেতু এখন আপনি এটির মধ্যে একটি ফাঁকা স্ট্রিং এবং একটি খালি অ্যারের একটি অ্যারের মধ্যে পার্থক্য করতে পারবেন না। (@ -স্প্যাশন ব্যাশের ক্ষেত্রে বিশেষ, এটি প্রসারিত "${arr[@]}"হয় "${arr[0]}" "${arr[1]}" …যা এটি কমান্ড লাইন তৈরির জন্য উপযুক্ত সরঞ্জাম হিসাবে তৈরি করে))
$ countArgs() { echo $#; }
$ countArgs a b c
3
$ countArgs
0
$ countArgs ""
1
$ brr=("")
$ countArgs "${brr[@]}"
1
$ countArgs "${arr[@]-}"
1
$ countArgs "${arr[@]}"
bash: arr[@]: unbound variable
$ set +u
$ countArgs "${arr[@]}"
0
তাহলে কি সমস্যাটির আশেপাশে কোনও উপায় রয়েছে, কোনও অ্যারের দৈর্ঘ্য পরীক্ষা করা if(নীচের কোডের নমুনা দেখুন), বা -uসেই সংক্ষিপ্ত অংশটির জন্য সেটিংস বন্ধ করে দেওয়া?
if [ "${#arr[@]}" = 0 ]; then
veryLongCommandLine
else
veryLongCommandLine "${arr[@]}"
fi
আপডেট:bugs ইেকেগামির ব্যাখ্যা দেওয়ার কারণে ট্যাগ সরানো হয়েছে ।

"${arr[@]}"। আমি কিছু অনুপস্থিত করছি? আমি যা দেখতে পাচ্ছি তা থেকে এটি অন্তত কাজ করে5.x।