উত্তর:
বেশিরভাগ ক্ষেত্রে, [
এটি একটি শেল অন্তর্নির্মিত এবং সমতুল্য test
। তবে, এর মতো test
, এটি একক কার্যকর কার্যকর হিসাবেও বিদ্যমান: /bin/[
আপনি এটি দেখেছিলেন। আপনি এটি type -a [
(একটি আর্চ লিনাক্স সিস্টেমে চলমান bash
) দিয়ে পরীক্ষা করতে পারেন :
$ type -a [
[ is a shell builtin
[ is /bin/[
সুতরাং, আমার সিস্টেমে আমার দুটি আছে [
: আমার শেলের বিল্টিন এবং এক্সিকিউটেবল ইন /bin
। এক্সিকিউটেবল এখানে নথিভুক্ত করা হয় man test
:
TEST(1) User Commands TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
DESCRIPTION
Exit with the status determined by EXPRESSION.
[ ... ]
যেমন আপনি উপরে উদ্ধৃত ম্যান পৃষ্ঠার উদ্ধৃতিতে দেখতে পাচ্ছেন, test
এবং [
সমতুল্য। /bin/[
এবং /bin/test
কমান্ড করছে POSIX দ্বারা নির্দিষ্ট হয় কেন আপনি তাদের সত্য যে অনেক শাঁস এছাড়াও builtins তাদের প্রদান সত্ত্বেও পাবেন। তাদের উপস্থিতি নিশ্চিত করে যে এটি নির্মাণ করে:
[ "$var" -gt 10 ] && echo yes
তাদের চালিত শেলটির কোনও [
বিল্টিন না থাকলেও কাজ করবে । উদাহরণস্বরূপ, এতে tcsh
:
> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ] && echo yes
yes
bash
অনেক প্রোগ্রামের মধ্যে একটি (শেল) যা একই রকম কাজ করার জন্য ডিজাইন করা হয়েছে। বাশ অন্যতম জনপ্রিয় তবে অনেকগুলি সিস্টেম ডিফল্ট শেল সহ শিপ করে। ভাল পরিচিত বেশী কিছু sh
, bash
, zsh
, dash
, ksh
, tcsh
, csh
এবং fish
। আপনার সিস্টেমে যেগুলি উপলভ্য রয়েছে cat /etc/shells
এবং এটি এখানে একটি আংশিক তালিকা দেখতে পাবেন ।
sh
হ'ল dash
তবে আমি ভেবেছিলাম উদ্ধার ব্যবস্থা /bin/sh
ব্যস্তবক্স ব্যবহার করে না। তুমি কি নিশ্চিত?
এটি শেল স্ক্রিপ্টগুলিতে শর্ত পরীক্ষার জন্য ব্যবহৃত হয়। এই প্রোগ্রামের আর একটি নাম test
:
if [ 1 -lt 2 ]; then ...
এটি শেল ব্যাকরণের মতো দেখাচ্ছে তবে তা নয়। সাধারণত [
শেল অন্তর্নির্মিত তবে সম্ভবত ফ্যালব্যাক হিসাবে এটি বাহ্যিক কমান্ড হিসাবে বিদ্যমান।
ব্লক "কন্ডিশনাল এক্সপ্রেশনের" দেখুন man bash
।
[
হিসাবে একই কমান্ড test
। কিছু * নিক্স সিস্টেমে একটি অন্যটির সাথে কেবল একটি লিঙ্ক। উদাহরণস্বরূপ, যদি আপনি চালান:
strings /usr/bin/test
strings /usr/bin/[
আপনি একই আউটপুট দেখতে পাবেন।
বেশিরভাগ শ-শেলস / পিক্সিকেল-শেলগুলিতে বিল্টিন [
এবং test
কমান্ড অন্তর্ভুক্ত থাকে । একই জন্য সত্য echo
। /bin/echo
বেশিরভাগ শেলের মধ্যে একটি কমান্ড এবং বিল্টিন উভয়ই রয়েছে । এ কারণেই কখনও কখনও আপনি মনে করেন যে উদাহরণস্বরূপ, echo
বিভিন্ন সিস্টেমে একইভাবে কাজ করে না।
test
বা [
কেবলমাত্র একটি প্রস্থান কোড 0
বা 1
। পরীক্ষাটি সফল হলে প্রস্থান কোডটি 0 হয়।
# you can use [ command but last argument must be ]
# = inside joke for programmers
# or use test command. Args are same, but last arg can't be ] :)
# so you can't write
# [-f file.txt] because [-f is not command and last argument is not ]
# after [ have to be delimiter as after every commands
[ -f file.txt ] && echo "file exists" || echo "file does not exist"
test -f file.txt && echo "file exists" || echo "file does not exist"
[ 1 -gt 2 ] && echo yes || echo no
test 1 -gt 2 && echo yes || echo no
# use external command, not builtin
/usr/bin/[ 1 -gt 2 ] && echo yes || echo no
এছাড়াও আপনি ব্যবহার করতে পারেন [
সঙ্গে if
:
if [ -f file.txt ] ; then
echo "file exists"
else
echo "file does not exist"
fi
# is the same as
if test -f file.txt ; then
echo "file exists"
else
echo "file does not exist"
fi
তবে আপনি if
প্রতিটি কমান্ড ব্যবহার করতে পারেন , if
প্রস্থান কোড পরীক্ষার জন্য। উদাহরণ স্বরূপ:
cp x y 2>/dev/null && echo cp x y OK || echo cp x y not OK
বা, ব্যবহার করে if
:
if cp x y 2>/dev/null ; then
echo cp x y OK
else
echo cp x y not OK
fi
আপনি test
ভেরিয়েবলটিতে সংরক্ষণ করা হয় এমন প্রস্থান কোডটি পরীক্ষা করতে কেবল কমান্ডটি ব্যবহার করে একই ফলাফলটি পেতে পারেন stat
:
cp x y 2>/dev/null
stat=$?
if test "$stat" = 0 ; then
echo cp x y OK
else
echo cp x y not OK
fi
এছাড়াও আপনি ব্যবহার করতে পারেন [[ ]]
এবং (( ))
যেমন পরীক্ষার জন্য, কিন্তু যারা না একই [
এবং test
প্রায় একই সিনট্যাক্স থাকা সত্বেও:
শেষ অবধি, আদেশটি কী তা জানতে আপনি ব্যবহার করতে পারেন:
type -a command
cmp /usr/bin/[ /usr/bin/test
হয়তো বা হ্যাশ sha256sum /usr/bin/[ /usr/bin/test
কিন্তু strings
। আমার সিস্টেমে (ওপেনসুএস টাম্বলওয়েড) বিটিডাব্লু তারা এক নয় (কেন)।
[
বিল্টিন নেই তা হ'ল একটি শেল যার লেখকরা এটিকে যুক্ত না করার সিদ্ধান্ত নিয়েছে। উদাহরণস্বরূপ একটি বিল্টিনtcsh
নেই[