সম্পাদনা: এটি একটি আরও সম্পূর্ণ সংস্করণ যা [
(ওরফে test
) এবং এর মধ্যে আরও পার্থক্য দেখায় [[
।
নিম্নলিখিত টেবিলটি দেখায় যে কোনও ভেরিয়েবল উদ্ধৃত হয়েছে কি না, আপনি একক বা ডাবল বন্ধনী ব্যবহার করুন কিনা এবং ভেরিয়েবলটিতে কেবল কোনও স্থান রয়েছে কিনা তা সেই পরীক্ষাগুলি দ্বারা প্রভাবিত হয় যা পরীক্ষার সাহায্যে পরীক্ষায় ব্যবহার করা উচিত কিনা তা প্রভাবিত করে -n/-z
।
| 1a 2a 3a 4a 5a 6a | 1b 2b 3b 4b 5b 6b
| [ [" [-n [-n" [-z [-z" | [[ [[" [[-n [[-n" [[-z [[-z"
-----+------------------------------------+------------------------------------
unset| false false true false true true | false false false false true true
null | false false true false true true | false false false false true true
space| false true true true true false| true true true true false false
zero | true true true true false false| true true true true false false
digit| true true true true false false| true true true true false false
char | true true true true false false| true true true true false false
hyphn| true true true true false false| true true true true false false
two | -err- true -err- true -err- false| true true true true false false
part | -err- true -err- true -err- false| true true true true false false
Tstr | true true -err- true -err- false| true true true true false false
Fsym | false true -err- true -err- false| true true true true false false
T= | true true -err- true -err- false| true true true true false false
F= | false true -err- true -err- false| true true true true false false
T!= | true true -err- true -err- false| true true true true false false
F!= | false true -err- true -err- false| true true true true false false
Teq | true true -err- true -err- false| true true true true false false
Feq | false true -err- true -err- false| true true true true false false
Tne | true true -err- true -err- false| true true true true false false
Fne | false true -err- true -err- false| true true true true false false
যদি আপনি জানতে চান যে কোনও ভেরিয়েবলটি শূন্য-দৈর্ঘ্যের নয় তবে নিম্নলিখিত যে কোনওটি করুন:
- একক বন্ধনীতে পরিবর্তনশীল উদ্ধৃতি (কলাম 2 এ)
-n
একক বন্ধনীতে চলকটি ব্যবহার করুন এবং উদ্ধৃত করুন (কলাম 4 এ)
- উদ্ধৃতি সহ বা ছাড়াই বা ছাড়াই ডাবল বন্ধনী ব্যবহার করুন
-n
(কলাম 1 বি - 4 বি)
কলাম 1A মধ্যে নোটিশ সারি লেবেল "দুই" ফলাফল থেকে বোঝা যায় যে, এ শুরু [
নির্ণয় করা হয় বিষয়বস্তু ভেরিয়েবলের যেন তারা শর্তাধীন অভিব্যক্তি অংশ ছিল (ফলাফলের কথন "টি" বা "এফ" এ ক্ষেত্রে প্রযোজ্য সাথে মিলে যায় বিবরণ কলাম)। যখন [[
(কলাম 1 বি) ব্যবহৃত হয়, পরিবর্তনশীল সামগ্রীটি একটি স্ট্রিং হিসাবে দেখা হয় এবং মূল্যায়ন হয় না।
3a এবং 5a কলামের ত্রুটিগুলি এই কারণে ঘটে যে ভেরিয়েবলের মানটিতে একটি স্থান অন্তর্ভুক্ত থাকে এবং ভেরিয়েবলটি উদ্ধৃত হয় না। আবার, 3b এবং 5b কলামে দেখানো হিসাবে, [[
ভেরিয়েবলের বিষয়বস্তুগুলি স্ট্রিং হিসাবে মূল্যায়ন করে।
অনুরূপভাবে, শূন্য দৈর্ঘ্যের স্ট্রিংগুলির পরীক্ষার জন্য, কলাম 6 এ, 5 বি এবং 6 বি এটি করার সঠিক উপায়গুলি দেখায়। এছাড়াও নোট করুন যে যদি এই পরীক্ষাগুলির কোনওটি তুচ্ছ করা যায় তবে যদি উপেক্ষার বিপরীত ক্রিয়াকলাপটি ব্যবহার করার চেয়ে আরও পরিষ্কার উদ্দেশ্য দেখা যায়। উদাহরণস্বরূপ: if ! [[ -n $var ]]
।
আপনি যদি ব্যবহার করছেন [
, আপনি অপ্রত্যাশিত ফলাফল না পেয়েছেন তা নিশ্চিত করার কীটি চলকটির উদ্ধৃতি দিচ্ছে। ব্যবহার করে [[
, এটা কোন ব্যাপার না।
ত্রুটি বার্তা, যা দমন করা হচ্ছে তা হ'ল "ইউনিারি অপারেটর প্রত্যাশিত" বা "বাইনারি অপারেটর প্রত্যাশিত"।
এটি স্ক্রিপ্ট যা উপরের টেবিলটি তৈরি করেছে।
#!/bin/bash
# by Dennis Williamson
# 2010-10-06, revised 2010-11-10
# for http://stackoverflow.com/q/3869072
# designed to fit an 80 character terminal
dw=5 # description column width
w=6 # table column width
t () { printf '%-*s' "$w" " true"; }
f () { [[ $? == 1 ]] && printf '%-*s' "$w" " false" || printf '%-*s' "$w" " -err-"; }
o=/dev/null
echo ' | 1a 2a 3a 4a 5a 6a | 1b 2b 3b 4b 5b 6b'
echo ' | [ [" [-n [-n" [-z [-z" | [[ [[" [[-n [[-n" [[-z [[-z"'
echo '-----+------------------------------------+------------------------------------'
while read -r d t
do
printf '%-*s|' "$dw" "$d"
case $d in
unset) unset t ;;
space) t=' ' ;;
esac
[ $t ] 2>$o && t || f
[ "$t" ] && t || f
[ -n $t ] 2>$o && t || f
[ -n "$t" ] && t || f
[ -z $t ] 2>$o && t || f
[ -z "$t" ] && t || f
echo -n "|"
[[ $t ]] && t || f
[[ "$t" ]] && t || f
[[ -n $t ]] && t || f
[[ -n "$t" ]] && t || f
[[ -z $t ]] && t || f
[[ -z "$t" ]] && t || f
echo
done <<'EOF'
unset
null
space
zero 0
digit 1
char c
hyphn -z
two a b
part a -a
Tstr -n a
Fsym -h .
T= 1 = 1
F= 1 = 2
T!= 1 != 2
F!= 1 != 1
Teq 1 -eq 1
Feq 1 -eq 2
Tne 1 -ne 2
Fne 1 -ne 1
EOF