আপনি যদি খালি উপাদানগুলির মতো কোনও অ্যারে সনাক্ত করতে চান তবে খালিarr=("" "")
হিসাবে একইarr=()
আপনি সমস্ত উপাদান এক সাথে পেস্ট করতে পারেন এবং ফলাফলটি শূন্য-দৈর্ঘ্যের কিনা তা পরীক্ষা করতে পারেন। (অ্যারে বিষয়বস্তুগুলির একটি সমতল অনুলিপি নির্মাণের জন্য পারফরম্যান্সের জন্য আদর্শ নয় যদি অ্যারেটি খুব বড় হতে পারে তবে আশা করি আপনি সেই জাতীয় প্রোগ্রামের জন্য ব্যাশ ব্যবহার করছেন না ...)
কিন্তু "${arr[*]}"
এর প্রথম চরিত্রের দ্বারা পৃথক উপাদানগুলির সাথে প্রসারিত হয় IFS
। সুতরাং আপনাকে আইএফএস সংরক্ষণ / পুনরুদ্ধার করতে IFS=''
হবে এবং এই কাজটি করতে হবে, অথবা অন্যথায় অ্যারে উপাদানগুলির স্ট্রিং দৈর্ঘ্য == # পরীক্ষা করুন - ১ ( n
উপাদানগুলির একটি অ্যারেরে পৃথক রয়েছে n-1
)। এই অফ বাই বাই মোকাবেলা করার জন্য, 1 দ্বারা সংক্ষিপ্তকরণ প্যাড করা সবচেয়ে সহজ
arr=("" "")
## Assuming default non-empty IFS
## TODO: also check for ${#arr[@]} -eq 0
concat="${arr[*]} " # n-1 separators + 1 space + array elements
[[ "${#concat}" -ne "${#arr[@]}" ]] && echo not empty array || echo empty array
পরীক্ষার ক্ষেত্রে set -x
### a non-empty element
$ arr=("" "x")
+ arr=("" "x")
$ concat="${arr[*]} "; [[ "${#concat}" -ne "${#arr[@]}" ]] && echo not empty array || echo empty array
+ concat=' x '
+ [[ 3 -ne 2 ]]
+ echo not empty array
not empty array
### 2 empty elements
$ arr=("" "")
+ arr=("" "")
$ concat="${arr[*]} "; [[ "${#concat}" -ne "${#arr[@]}" ]] && echo not empty array || echo empty array
+ concat=' '
+ [[ 2 -ne 2 ]]
+ echo empty array
empty array
দুর্ভাগ্যবশত, এই ব্যর্থ arr=()
: [[ 1 -ne 0 ]]
। সুতরাং আপনাকে প্রথমে পৃথকভাবে খালি অ্যারেগুলি পরীক্ষা করতে হবে।
বা সাথেIFS=''
। সম্ভবত আপনি সাবএসেল ব্যবহারের পরিবর্তে আইএফএস সংরক্ষণ / পুনরুদ্ধার করতে চান, কারণ আপনি সহজেই কোনও সাব-শেলের ফলাফল পেতে পারেন না।
# inside a () subshell so we don't modify our own IFS
(IFS='' ; [[ -n "${arr[*]}" ]] && echo not empty array || echo empty array)
উদাহরণ:
$ arr=("" "")
$ (IFS='' ; [[ -n "${arr[*]}" ]] && echo not empty array || echo empty array)
+ IFS=
+ [[ -n '' ]]
+ echo empty array
empty array
নেই এর সাথে কাজ arr=()
- এটা এখনও ঠিক খালি স্ট্রিং আছে।
=
এটি একটি স্ট্রিং অপারেটর। এটা তোলে এই ক্ষেত্রে সূক্ষ্ম কাজ ঘটবে, কিন্তু আমি সঠিক গাণিতিক অপারেটর ব্যবহার করতে চাই-eq
পরিবর্তে (ধরো আমি স্যুইচ করতে চান চাই-ge
বা-lt
, ইত্যাদি)।