উত্তর:
হ্যাঁ, এগুলি (প্রায়) সম্পূর্ণ সমতুল্য।
একটি [ … ]
নির্মাণের ভিতরে :
=
অপারেটর (অথবা এমনকি অ posix বিকল্প ==
) স্ট্রিং মেলা, না প্যাটার্ন ম্যাচিং পরীক্ষা।
একটি [[ ]]
কনস্ট্রাক্টের ভিতরে (ম্যান বাশ থেকে):
যখন == এবং! = অপারেটরগুলি ব্যবহার করা হয়, তখন অপারেটরের ডানদিকে স্ট্রিংটিকে একটি প্যাটার্ন হিসাবে বিবেচনা করা হয় এবং প্যাটার্ন ম্যাচিংয়ের অধীনে নীচে বর্ণিত বিধি অনুসারে মেলা ভার । শেল অপশনটি নোকাসেম্যাচ সক্ষম থাকলে, বর্ণমালার অক্ষরের ক্ষেত্রে বিবেচনা না করে ম্যাচটি সম্পাদিত হয় । যদি স্ট্রিংটি (==) মেলে বা (! =) প্যাটার্নের সাথে মেলে না, এবং অন্যথায় 1 টির সাথে প্রত্যাবর্তনের মান 0 হবে। প্যাটার্নের যে কোনও অংশই স্ট্রিং হিসাবে মিলতে বাধ্য করার জন্য উদ্ধৃত করা যেতে পারে।
একটি case
কনস্ট্রাক্টের ভিতরে (ম্যান ব্যাশ, সম্পাদিত এবং জোর দেওয়া খনি থেকে):
কেস শব্দটি [[(প্যাটার্ন [| প্যাটার্ন] ...) তালিকায় ;; ] ... esac
... চেষ্টা ঘুরে প্রতিটি প্যাটার্ন বিরুদ্ধে মেলে, একই ম্যাচিং ব্যবহার বিধি হিসাবে পথনাম সম্প্রসারণ (নীচে পথনাম সম্প্রসারণ দেখুন)। … পরীক্ষা করা প্রতিটি প্যাটার্নটি টিলডে সম্প্রসারণ, পরামিতি এবং পরিবর্তনশীল সম্প্রসারণ, পাটিগণিত প্রতিস্থাপন, কমান্ড প্রতিস্থাপন এবং প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে প্রসারিত করা হয়। শেল অপশনটি নোকাসেম্যাচ সক্ষম থাকলে, বর্ণমালার অক্ষরের ক্ষেত্রে বিবেচনা না করে ম্যাচটি সম্পাদিত হয় ।
উভয় Pattern Matching
এবং Pathname Expansion
ব্যাশ ম্যানুয়ালটিতে একই অর্থ ব্যবহৃত হয়।
আমি ম্যানুয়ালটিতে কেবলমাত্র পার্থক্যটি দেখতে পাচ্ছি:
`[[ … ]]` case
tilde expansion tilde expansion
parameter and variable expansion parameter and variable expansion
arithmetic expansion arithmetic substitution
command substitution command substitution
process substitution process substitution
quote removal
যে quote removal
স্পষ্টভাবে ক্ষেত্রে কনস্ট্রাক্ট জন্য তালিকাভুক্ত করা হয় না।
এটি (এটির জন্য [[ … ]]
) হুবহু মেলে কাজ করে :
প্যাটার্নের যে কোনও অংশই স্ট্রিং হিসাবে মিলতে বাধ্য করার জন্য উদ্ধৃত করা যেতে পারে।
এই শেষ বিন্দু (বর্তমানে পরিবর্তনশীল পরীক্ষা করার জন্য ব্যবহার করুন না একটি প্যাটার্ন):
case "$1" in
"$pattern") echo case match
esac
অন্তর্নিহিত extglob
:
যেহেতু ব্যাশ সংস্করণ 4.3
যখন '==' এবং '! =' অপারেটরগুলি ব্যবহার করা হয় তখন অপারেটরের ডানদিকে স্ট্রিংটি একটি প্যাটার্ন হিসাবে বিবেচনা করা হয় এবং প্যাটার্ন ম্যাচিংয়ে নীচে বর্ণিত বিধি অনুসারে ম্যাচ করা হয় , যেমন এক্সট্র্লোব শেল বিকল্পটি সক্ষম করা হয়েছিল ।
এর অর্থ হ'ল extglob
আনসেট অপশনটির সাথে ব্যবহৃত প্যাটার্নটি কেস স্টেটমেন্টে [[
বাশ সংস্করণের ৪.৩ সংস্করণের পরে আলাদাভাবে কাজ করবে inside
অন্তর্নিহিত |
:
ক্ষেত্রে সিনট্যাক্সটি হ'ল:
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
যার অর্থ এখানে একটি |
(ওআর) দ্বারা বিভক্ত বেশ কয়েকটি নিদর্শন থাকতে পারে ।
এটার মত:
shopt -s extglob; p1="+([0-9])"; p2="+([abcde])"
case "$1" in
$p1|$p2) echo "or case match" ; ;;
esac
যা কেবলমাত্র সংখ্যার একটি স্ট্রিংয়ের সাথে মেলে বা কেবলমাত্র অক্ষরের মধ্যে abcde
, যেমন 1234
বা aabee
তবে, কিন্তু নয় 12a
বা b23
।
একটি [[
সমানভাবে কাজ করবে যদি রেজেক্স (var p3 দেখুন) ব্যবহার করা হয়:
#!/bin/bash
shopt -s extglob ### Use extended globbing.
shopt -s globasciiranges ### The range [a-z] will expand to [abcdefghijklmnopqrstuvwxyz].
pattern="+([0-9])"
p1="+([0-9])"
p2="+([a-z])"
p3="^([0-9]+|[a-z]+)$"
case "$1" in
$pattern) echo case1 match ; ;&
$p1|$p2) echo case2 match ; ;;
esac
[[ "$1" == $pattern ]] && echo if1 match
[[ "$1" =~ $p3 ]] && echo if2 match
shopt
সেটিংস এবং মানগুলি নির্বিশেষে আমি তাদের কোনও ক্ষেত্রেই খুঁজে পাচ্ছি না । পার্থক্য কেবলমাত্র এটির অধীনে চলমান অবস্থায় আউটপুটটিতে প্রসারিত হয় না ।$1
pattern
$?
$1
xtrace