বর্গাকার বন্ধনী কার্যকর করার উদ্দেশ্যে কী


উত্তর:


33

বেশিরভাগ ক্ষেত্রে, [এটি একটি শেল অন্তর্নির্মিত এবং সমতুল্য 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

5
@ আলেকজান্দ্রিয় আইরিমিয়ার মানে কি? যে শেলটিতে [বিল্টিন নেই তা হ'ল একটি শেল যার লেখকরা এটিকে যুক্ত না করার সিদ্ধান্ত নিয়েছে। উদাহরণস্বরূপ একটি বিল্টিন tcsh নেই [
টেরডন

7
@AlexandruIrimiea- এ তারা "কাস্টম" শেল নয়। এটি ঠিক এমন bashঅনেক প্রোগ্রামের মধ্যে একটি (শেল) যা একই রকম কাজ করার জন্য ডিজাইন করা হয়েছে। বাশ অন্যতম জনপ্রিয় তবে অনেকগুলি সিস্টেম ডিফল্ট শেল সহ শিপ করে। ভাল পরিচিত বেশী কিছু sh, bash, zsh, dash, ksh, tcsh, cshএবং fish। আপনার সিস্টেমে যেগুলি উপলভ্য রয়েছে cat /etc/shellsএবং এটি এখানে একটি আংশিক তালিকা দেখতে পাবেন ।
terdon

1
@ জার্গডব্লিউমিত্যাগ সত্যিই? আমি জানতাম যে উবুন্টু shহ'ল dashতবে আমি ভেবেছিলাম উদ্ধার ব্যবস্থা /bin/shব্যস্তবক্স ব্যবহার করে না। তুমি কি নিশ্চিত?
টেরডন


1
@AlexandruIrimiea, কি কমান্ড এটা সংক্রান্ত প্রয়োজনীয় সালে নির্মিত হয়েছে এবং যা কমান্ড বা সালে নির্মিত হতে পারে না, দেখুন এই পোস্টে
ওয়াইল্ডকার্ড

12

এটি শেল স্ক্রিপ্টগুলিতে শর্ত পরীক্ষার জন্য ব্যবহৃত হয়। এই প্রোগ্রামের আর একটি নাম test:

if [ 1 -lt 2 ]; then ...

এটি শেল ব্যাকরণের মতো দেখাচ্ছে তবে তা নয়। সাধারণত [শেল অন্তর্নির্মিত তবে সম্ভবত ফ্যালব্যাক হিসাবে এটি বাহ্যিক কমান্ড হিসাবে বিদ্যমান।

ব্লক "কন্ডিশনাল এক্সপ্রেশনের" দেখুন man bash


1
আরও দেখুন: unix.stackexchange.com/questions/224616/…
dr01

9

[হিসাবে একই কমান্ড 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। আমার সিস্টেমে (ওপেনসুএস টাম্বলওয়েড) বিটিডাব্লু তারা এক নয় (কেন)।
23:37

আমি বাইট তুলনা বলতে চাইনি। কিছু * নিক্সে সেগুলি বাইট লেভেল = লিঙ্কেও সমান। পজিক্স পরীক্ষা
kshji
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.