বাশ স্ক্রিপ্টগুলির জন্য একটি শব্দার্থক?


88

আমি জানি অন্য যে কোনও ভাষার চেয়ে আমি যতবার ছোট জিনিস প্রয়োজন প্রতিবার গুগলিংয়ের মাধ্যমে আমি বাশকে "শিখি" করেছি। ফলস্বরূপ, আমি কাজ করতে দেখা যায় এমন ছোট স্ক্রিপ্টগুলি একসাথে প্যাচওয়ার্ক করতে পারি। তবে, আমি সত্যিই জানি না কী চলছে এবং আমি বাশকে একটি প্রোগ্রামিং ভাষা হিসাবে আরও একটি আনুষ্ঠানিক পরিচয়ের প্রত্যাশা করছিলাম। উদাহরণস্বরূপ: মূল্যায়ন আদেশ কি? স্কোপিং বিধি কি? টাইপিং শৃঙ্খলা কী, উদাহরণস্বরূপ সবকিছুই একটি স্ট্রিং? প্রোগ্রামের অবস্থা কী - এটি কি ভেরিয়েবল নামের স্ট্রিংগুলির মূল-মূল্য নির্ধারণ; এর চেয়েও বেশি কিছু আছে, যেমন স্ট্যাক? সেখানে গাদা আছে? ইত্যাদি।

আমি এই জাতীয় অন্তর্দৃষ্টির জন্য জিএনইউ বাশ ম্যানুয়ালটির সাথে পরামর্শ করার জন্য ভেবেছিলাম, তবে আমি যা চাই তা তা মনে হয় না; এটি সিনট্যাকটিক চিনির লন্ড্রি তালিকার আরও বেশি কারণ মূল শব্দগুলির মডেলটির ব্যাখ্যা নয়। অনলাইন মিলিয়ন ও ওয়ান "ব্যাশ টিউটোরিয়াল" কেবল আরও খারাপ। সম্ভবত আমার প্রথমে অধ্যয়ন করা উচিত sh, এবং এর উপরে একটি সিনট্যাকটিক চিনি হিসাবে বাশকে বুঝতে হবে? যদিও এটি সঠিক মডেল কিনা তা আমি জানি না।

কোনও পরামর্শ?

সম্পাদনা: আমি আদর্শভাবে যা খুঁজছি তার উদাহরণ প্রদান করতে আমাকে বলা হয়েছে। আমি "ফর্মাল শব্দার্থবিজ্ঞান" কী বিবেচনা করব তার একটি চূড়ান্ত উদাহরণ হ'ল "জাভাস্ক্রিপ্টের মূলমর্ম" এর এই কাগজটি । সম্ভবত কিছুটা কম আনুষ্ঠানিক উদাহরণ হ্যাস্কেল ২০১০ এর প্রতিবেদন



4
আমি নিশ্চিত নই যে বাশের একটি "মূল শব্দার্থক মডেল" রয়েছে (ভাল, সম্ভবত "প্রায় সব কিছু একটি স্ট্রিং"); আমি মনে করি এটি পুরোভাবেই সিনট্যাকটিক চিনি।
গর্ডন ডেভিসন

4
আপনি যাকে "সিনট্যাকটিক চিনির লন্ড্রি তালিকা" বলছেন তা আসলে প্রসারণের সিনমেটিক মডেল - মৃত্যুদন্ড কার্যকর করার একটি অত্যন্ত গুরুত্বপূর্ণ অঙ্গ। 90% ত্রুটি এবং বিভ্রান্তিটি প্রসারণ মডেল না বুঝার কারণে is
সে অন্য লোক

4
আমি দেখতে পাচ্ছি কেন কেউ যদি মনে করতে পারে যে এটি একটি বিস্তৃত প্রশ্ন আপনি যদি এটি পড়েন তবে আমি কীভাবে শেল স্ক্রিপ্ট লিখি ? তবে আসল প্রশ্নটি হ'ল আনুষ্ঠানিক শব্দার্থক এবং বিশেষত শেল ভাষা এবং বাশের জন্য ভিত্তি কী? , এবং এটি একটি সুসংগত উত্তর সহ একটি ভাল প্রশ্ন। পুনরায় খুলতে ভোট।
কোজিরো

4
আমি লিনাক্সকম্যান্ড.আরআরজে বেশ কিছুটা শিখেছি এবং কমান্ড লাইনে এবং শেল স্ক্রিপ্টগুলি লেখার জন্য আরও গভীর-পুস্তকের একটি বিনামূল্যে পিডিএফ আছে
সামপ্র,

উত্তর:


107

একটি শেল অপারেটিং সিস্টেমের জন্য একটি ইন্টারফেস। এটি সাধারণত তার নিজের মধ্যে আরও কম-বেশি শক্তসমর্থ প্রোগ্রামিং ভাষা হয় তবে বিশেষত অপারেটিং সিস্টেম এবং ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করা সহজ করার জন্য ডিজাইন করা বৈশিষ্ট্যগুলির সাথে। পসিক্স শেলের (পরবর্তীকালে "শেল" হিসাবে উল্লেখ করা হয়েছে) শব্দার্থবিজ্ঞানগুলি একটি মিট হিসাবে কিছুটা থাকে, LISP এর কয়েকটি বৈশিষ্ট্যগুলির সংমিশ্রণ (s- এক্সপ্রেশনগুলির শেল শব্দের বিভাজনের সাথে অনেকগুলি মিল রয়েছে ) এবং সি (শেলের অনেকগুলি গাণিতিক বাক্য গঠন) শব্দার্থবিজ্ঞান সি থেকে আসে)।

শেলের সিনট্যাক্সের অন্য মূলটি পৃথক ইউনিক্স ইউটিলিটিগুলির একটি ম্যাসম্যাশ হিসাবে তার লালন থেকে আসে। শেলের মধ্যে প্রায়শই অন্তর্নির্মিত বেশিরভাগগুলি বাস্তবে বাহ্যিক কমান্ড হিসাবে প্রয়োগ করা যেতে পারে। এটি লুপের জন্য অনেকগুলি শেল নিওফাইট নিক্ষেপ করে যখন তারা বুঝতে পারে যে /bin/[অনেক সিস্টেমে বিদ্যমান।

$ if '/bin/[' -f '/bin/['; then echo t; fi # Tested as-is on OS X, without the `]`
t

ওয়াট?

শেল কীভাবে প্রয়োগ করা হয় তা যদি আপনি লক্ষ্য করেন তবে এটি আরও অনেক বেশি অর্থবোধ করে। এখানে একটি প্রয়োগ হিসাবে আমি অনুশীলন হিসাবে করেছি। এটি পাইথনে রয়েছে, তবে আমি আশা করি এটি কারও জন্য হ্যাঙ্গআপ নয়। এটি মারাত্মক শক্তিশালী নয়, তবে এটি শিক্ষণীয়:

#!/usr/bin/env python

from __future__ import print_function
import os, sys

'''Hacky barebones shell.'''

try:
  input=raw_input
except NameError:
  pass

def main():
  while True:
    cmd = input('prompt> ')
    args = cmd.split()
    if not args:
      continue
    cpid = os.fork()
    if cpid == 0:
      # We're in a child process
      os.execl(args[0], *args)
    else:
      os.waitpid(cpid, 0)

if __name__ == '__main__':
  main()

আমি আশা করি উপরেরটি এটি পরিষ্কার করে দিয়েছে যে শেলের এক্সিকিউশন মডেলটি অনেক বেশি:

1. Expand words.
2. Assume the first word is a command.
3. Execute that command with the following words as arguments.

সম্প্রসারণ, আদেশের সমাধান, কার্যকর করা execution শেলটির সমস্ত শব্দার্থবিজ্ঞান এই তিনটি জিনিসের একটিতে আবদ্ধ, যদিও আমি উপরে লিখেছি বাস্তবায়নের চেয়ে সেগুলি অনেক বেশি সমৃদ্ধ।

সমস্ত আদেশ না fork। প্রকৃতপক্ষে, কয়েকটি মুখ্য কমান্ড রয়েছে যা বহিরাগত হিসাবে প্রয়োগ করা এক টন অর্থে তৈরি করে না (যেমন তাদের করতে হবে fork), তবে এমনকি এগুলি প্রায়শই কঠোর পসিক্স সম্মতির জন্য বহিরাগত হিসাবে উপলব্ধ।

পশিক শেলটি বাড়ানোর জন্য নতুন বৈশিষ্ট্য এবং কীওয়ার্ড যুক্ত করে ব্যাশ এই ভিত্তিতে তৈরি করে। এটি sh এর সাথে প্রায় উপযুক্ত। (আমি আরও আশ্চর্য হই যে লোকেরা কীভাবে একটি প্রোগ্রামিং ভাষার শব্দার্থবিজ্ঞান এবং শৈলীর বিষয়ে এত যত্ন করতে পারে এবং শেলের শব্দার্থকতা এবং শৈলীর জন্য খুব সামান্য, তবে আমি বিচ্ছিন্ন হয়ে পড়েছি।)

মূল্যায়নের আদেশ

এটি একটি কৌতূহলমূলক প্রশ্ন: বাশ তার প্রাথমিক বাক্য বাক্স থেকে বাম থেকে ডানদিকে এক্সপ্রেশন ব্যাখ্যা করে, তবে গাণিতিক বাক্য গঠনে এটি সি এর নজির অনুসরণ করে। প্রকাশ থেকে পৃথক প্রসারণও , যদিও। থেকে EXPANSIONব্যাশ ম্যানুয়াল বিভাগে:

বিস্তারের ক্রম: ব্রেস সম্প্রসারণ; টিলডে সম্প্রসারণ, প্যারামিটার এবং পরিবর্তনশীল সম্প্রসারণ, পাটিগণিতের সম্প্রসারণ এবং কমান্ড প্রতিস্থাপন (বাম থেকে ডানদিকে ফ্যাশন); শব্দ বিভাজন; এবং পথের নাম সম্প্রসারণ।

আপনি যদি ওয়ার্ডস্প্লিটিং, প্যাথনাম এক্সপেনশন এবং প্যারামিটার এক্সপেনশন বুঝতে থাকেন তবে ব্যাশ কী করে তা বেশিরভাগই বোঝার পথে আপনি ভাল। নোট করুন যে ওয়ার্ডস্প্লিট করার পরে পথের নামটি প্রসারিত হওয়া সমালোচনাযোগ্য, কারণ এটি নিশ্চিত করে যে তার নামের সাদা অংশের একটি ফাইল এখনও একটি গ্লোব দ্বারা মিলে যেতে পারে। এই কারণেই গ্লোব বিস্তারের ভাল ব্যবহার সাধারণভাবে কমান্ডগুলি পার্সিংয়ের চেয়ে ভাল ।

ব্যাপ্তি

ফাংশন সুযোগ

অনেক পুরানো ইসসিএমএসক্রিপ্টের মতো শেলটির গতিশীল সুযোগ রয়েছে যতক্ষণ না আপনি কোনও ফাংশনের মধ্যে স্পষ্টভাবে নামগুলি ঘোষণা করেন।

$ foo() { echo $x; }
$ bar() { local x; echo $x; }
$ foo

$ bar

$ x=123
$ foo
123
$ bar

$ …

পরিবেশ এবং প্রক্রিয়া "সুযোগ"

সাবশেলগুলি তাদের পিতামাত শেলগুলির পরিবর্তনশীল উত্তরাধিকার সূত্রে প্রাপ্ত, তবে অন্যান্য ধরণের প্রক্রিয়াগুলি অপ্রত্যাশিত নামের উত্তরাধিকার সূত্রে পায় না।

$ x=123
$ ( echo $x )
123
$ bash -c 'echo $x'

$ export x
$ bash -c 'echo $x'
123
$ y=123 bash -c 'echo $y' # another way to transiently export a name
123

আপনি এই স্কোপিং বিধিগুলি একত্রিত করতে পারেন:

$ foo() {
>   local -x bar=123 # Export foo, but only in this scope
>   bash -c 'echo $bar'
> }
$ foo
123
$ echo $bar

$

টাইপিং শৃঙ্খলা

উম, প্রকার। হ্যাঁ বাশের সত্যই প্রকার নেই, এবং সমস্ত কিছু স্ট্রিংয়ে প্রসারিত হয়েছে (বা সম্ভবত কোনও শব্দ আরও উপযুক্ত হবে)) তবে আসুন বিভিন্ন ধরণের বিস্তৃতি পরীক্ষা করা যাক।

স্ট্রিংস

খুব বেশি কিছু স্ট্রিং হিসাবে বিবেচনা করা যেতে পারে। ব্যাশের বেয়ারওয়ার্ডগুলি এমন স্ট্রিং রয়েছে যার অর্থ সম্পূর্ণরূপে এটি প্রয়োগিত বিস্তারের উপর নির্ভর করে।

কোনও প্রসারণ নেই

খালি শব্দটি সত্যই কেবল একটি শব্দ এবং এটিতে কোটেশনগুলি কিছুই পরিবর্তন করে না এমনটি প্রদর্শন করা সার্থক হতে পারে।

$ echo foo
foo
$ 'echo' foo
foo
$ "echo" foo
foo
সাবস্ট্রিং বিস্তৃতি
$ fail='echoes'
$ set -x # So we can see what's going on
$ "${fail:0:-2}" Hello World
+ echo Hello World
Hello World

সম্প্রসারণ সম্পর্কে আরও জানতে Parameter Expansionম্যানুয়ালটির বিভাগটি পড়ুন । এটি বেশ শক্তিশালী।

পূর্ণসংখ্যা এবং পাটিগণিতের এক্সপ্রেশন

অ্যাসাইনমেন্ট এক্সপ্রেশনগুলির ডান হাতের শৈলীর গাণিতিক হিসাবে বিবেচনা করার জন্য শেলটি বলতে আপনি পূর্ণসংখ্যা বৈশিষ্ট্যের সাথে নামগুলি ইমবুউ করতে পারেন। তারপরে, যখন প্যারামিটারটি প্রসারিত হবে তখন… স্ট্রিংয়ে প্রসারিত হওয়ার আগে এটি পূর্ণসংখ্যার গণিত হিসাবে মূল্যায়ন করা হবে।

$ foo=10+10
$ echo $foo
10+10
$ declare -i foo
$ foo=$foo # Must re-evaluate the assignment
$ echo $foo
20
$ echo "${foo:0:1}" # Still just a string
2

অ্যারে

যুক্তি এবং অবস্থানগত পরামিতি

অ্যারে সম্পর্কে কথা বলার আগে অবস্থানগত পরামিতিগুলি আলোচনা করা উপযুক্ত হতে পারে। একটি শেল স্ক্রিপ্ট আর্গুমেন্ট সংখ্যাযুক্ত পরামিতি ব্যবহার অ্যাক্সেস করা যেতে পারে $1, $2, $3, ইত্যাদি আপনি এই সকল প্যারামিটার ব্যবহার একবারে অ্যাক্সেস করতে পারেন "$@", যা সম্প্রসারণ অ্যারে সঙ্গে সাধারণ অনেক কিছু হয়েছে। আপনি বিল্টিনগুলি setবা shiftবিল্টিন ব্যবহার করে অবস্থানগত পরামিতিগুলি সেট এবং পরিবর্তন করতে পারেন , বা কেবলমাত্র এই পরামিতিগুলির সাহায্যে শেল বা শেল ফাংশনটি চাওয়ার মাধ্যমে:

$ bash -c 'for ((i=1;i<=$#;i++)); do
>   printf "\$%d => %s\n" "$i" "${@:i:1}"
> done' -- foo bar baz
$1 => foo
$2 => bar
$3 => baz
$ showpp() {
>   local i
>   for ((i=1;i<=$#;i++)); do
>     printf '$%d => %s\n' "$i" "${@:i:1}"
>   done
> }
$ showpp foo bar baz
$1 => foo
$2 => bar
$3 => baz
$ showshift() {
>   shift 3
>   showpp "$@"
> }
$ showshift foo bar baz biz quux xyzzy
$1 => biz
$2 => quux
$3 => xyzzy

ব্যাশ ম্যানুয়াল কখনও কখনও $0অবস্থানগত পরামিতি হিসাবেও বোঝায় । আমি এটি বিভ্রান্তিকর বলে মনে করি কারণ এটি আর্গুমেন্ট গণনায় এটি অন্তর্ভুক্ত করে না $#, তবে এটি একটি সংখ্যাযুক্ত পরামিতি, তাই মেহ। $0শেল বা বর্তমান শেল স্ক্রিপ্টের নাম।

অ্যারে

অ্যারেগুলির বাক্য গঠনটি পজিশনাল প্যারামিটারগুলির পরে তৈরি করা হয়, সুতরাং যদি আপনি চান তবে নামমাত্র "বাহ্যিক অবস্থানগত পরামিতি" হিসাবে অ্যারেগুলি ভাবা বেশিরভাগ স্বাস্থ্যকর। নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে অ্যারেগুলি ঘোষণা করা যেতে পারে:

$ foo=( element0 element1 element2 )
$ bar[3]=element3
$ baz=( [12]=element12 [0]=element0 )

আপনি সূচি দ্বারা অ্যারে উপাদান অ্যাক্সেস করতে পারেন:

$ echo "${foo[1]}"
element1

আপনি অ্যারে টুকরো টুকরো করতে পারেন:

$ printf '"%s"\n' "${foo[@]:1}"
"element1"
"element2"

আপনি যদি কোনও অ্যারেটিকে সাধারণ প্যারামিটার হিসাবে বিবেচনা করেন তবে আপনি জিরোথ সূচক পাবেন।

$ echo "$baz"
element0
$ echo "$bar" # Even if the zeroth index isn't set

$ …

আপনি যদি শব্দ বিভাজন রোধ করতে উদ্ধৃতি বা ব্যাকস্ল্যাশ ব্যবহার করেন তবে অ্যারে নির্দিষ্ট শব্দগুলির বিভাজন রক্ষণাবেক্ষণ করবে:

$ foo=( 'elementa b c' 'd e f' )
$ echo "${#foo[@]}"
2

অ্যারে এবং অবস্থানগত পরামিতিগুলির মধ্যে প্রধান পার্থক্য:

  1. অবস্থানগত পরামিতিগুলি বিরল নয়। যদি $12সেট করা থাকে তবে $11আপনিও নিশ্চিত হতে পারেন যে সেটও রয়েছে set (এটি খালি স্ট্রিংয়ে সেট করা যেতে পারে তবে $#এটি 12 এর চেয়ে কম হবে না) যদি "${arr[12]}"সেট করা থাকে তবে "${arr[11]}"সেট করার কোনও গ্যারান্টি নেই এবং অ্যারের দৈর্ঘ্য 1 এর চেয়ে কম হতে পারে।
  2. একটি অ্যারের জিরোথ উপাদানটি স্পষ্টতই সেই অ্যারের জিরোথ উপাদান। অবস্থানগত পরামিতিগুলিতে, জিরোথ উপাদানটি প্রথম যুক্তি নয় , শেল বা শেল স্ক্রিপ্টের নাম।
  3. করার shiftএকটি অ্যারের, আপনি ফালি আছে এবং এটি reassign মত arr=( "${arr[@]:1}" )। আপনি এটি করতে পারেন unset arr[0], তবে এটি সূচক 1 এ প্রথম উপাদানটি তৈরি করবে।
  4. অ্যারেগুলি শ্বেত ফাংশনগুলির মধ্যে গ্লোবাল হিসাবে সুস্পষ্টভাবে ভাগ করা যায় তবে এটি দেখার জন্য আপনাকে শেল ফাংশনে স্পষ্টত অবস্থানগত পরামিতিগুলি দিতে হবে।

ফাইল নামগুলির অ্যারে তৈরি করতে প্রায়শই পথের নাম ব্যাবহার করা সুবিধাজনক:

$ dirs=( */ )

কমান্ড

কমান্ডগুলি কী, তবে সেগুলি ম্যানুয়াল দ্বারা আমার চেয়ে আরও ভাল গভীরতায় আবৃত। বিভাগ পড়ুন SHELL GRAMMAR। বিভিন্ন ধরণের কমান্ডগুলি হ'ল:

  1. সাধারণ কমান্ড (যেমন $ startx)
  2. পাইপলাইন (যেমন $ yes | make config) (লোল)
  3. তালিকা (উদাঃ $ grep -qF foo file && sed 's/foo/bar/' file > newfile)
  4. যৌগিক কমান্ড (যেমন $ ( cd -P /var/www/webroot && echo "webroot is $PWD" ))
  5. কপ্রোসেসেস (জটিল, উদাহরণ নয়)
  6. ফাংশন (একটি নামযুক্ত যৌগিক কমান্ড যা সাধারণ কমান্ড হিসাবে বিবেচনা করা যেতে পারে)

এক্সিকিউশন মডেল

অবশ্যই মৃত্যুদন্ড কার্যকর করা মডেল একটি গাদা এবং একটি স্ট্যাক উভয় জড়িত। এটি সমস্ত ইউএনআইএক্স প্রোগ্রামের জন্য স্থানীয়। বাশের শেল ফাংশনগুলির জন্য কল স্ট্যাক রয়েছে যা callerবিল্টিনের নেস্টেড ব্যবহারের মাধ্যমে দৃশ্যমান ।

তথ্যসূত্র:

  1. SHELL GRAMMARব্যাশ ম্যানুয়াল বিভাগে
  2. XCU শেল কমান্ড ভাষা ডকুমেন্টেশন
  3. ব্যাশ গাইড Greycat এর উইকি উপর।
  4. ইউএনআইএক্স পরিবেশে উন্নত প্রোগ্রামিং Advanced

আপনি যদি আমাকে নির্দিষ্ট দিকে আরও প্রসারিত করতে চান তবে দয়া করে মন্তব্য করুন।


16
+1: দুর্দান্ত ব্যাখ্যা। উদাহরণ সহ এটি লেখার জন্য ব্যয় করা সময়টির প্রশংসা করুন।
জয়পাল সিংহ

yes | make config;-) এর জন্য +1 তবে গম্ভীরভাবে, খুব ভাল লেখার জন্য।
ডিজিটাল ট্রমা

শুধু এই পড়া শুরু .. চমৎকার। কিছু মন্তব্য ছেড়ে দেবে। 1) আরও বড় অবাক হয়ে আসে যখন আপনি এটি দেখতে পান /bin/[এবং /bin/testপ্রায়শই একই অ্যাপ্লিকেশন হয় 2) "প্রথম শব্দটি একটি আদেশ বলে ধরে নিন।" - আপনি যখন অ্যাসাইনমেন্টটি করবেন তখন প্রত্যাশা করুন ...
করোলি হরভথ

@ করলিহর্বাথ হ্যাঁ, আমি ইচ্ছাকৃতভাবে আমার ডেমো শেল থেকে অ্যাসাইনমেন্টটি বাদ দিয়েছি কারণ ভেরিয়েবলগুলি একটি জটিল জগাখিচুড়ি। এই উত্তরটি মনে রেখে সেই ডেমো শেলটি লেখা হয়নি - এটি অনেক আগে লেখা হয়েছিল। আমি মনে করি আমি এটি তৈরি করতে পারি execleএবং পরিবেশের সাথে প্রথম শব্দগুলিকে বিভক্ত করতে পারি তবে এটি এখনও এটি আরও জটিল করে তুলবে।
কোজিরো

@ কোজিরো: না এটি কেবলমাত্র জটিল করে তুলবে, এটি অবশ্যই আমার উদ্দেশ্য ছিল না! তবে অ্যাসাইনমেন্টটি কিছুটা আলাদাভাবে কাজ করে (x), এবং IMHO আপনার এটি পাঠ্যের মধ্যে কোথাও উল্লেখ করা উচিত। (এক্স): এবং কিছু বিভ্রান্তির উত্স ... আমি আর কতবার লোককে a = 1কাজ না করার বিষয়ে অভিযোগ করতে দেখেছি তাও গণনা করতে পারি না )।
করলি হরভাথ

5

আপনার প্রশ্নের উত্তর "টাইপিং শৃঙ্খলাটি কী, উদাহরণস্বরূপ সবকিছুই একটি স্ট্রিং" বাশ ভেরিয়েবলগুলি চরিত্রের স্ট্রিং। তবে, বাশগুলি পাটিগণিতের ক্রিয়াকলাপের অনুমতি দেয় এবং যখন ভেরিয়েবলগুলি পূর্ণসংখ্যা হয় তখন ভেরিয়েবলের সাথে তুলনা করা যায়। বাশ ভেরিয়েবলগুলিকে নিয়ন্ত্রণ করার ব্যতিক্রমটি চরিত্রের স্ট্রিং হয় যখন বলা হয় ভেরিয়েবলগুলি টাইপসেট হয় বা অন্যথায় ঘোষিত হয়

$ A=10/2
$ echo "A = $A"           # Variable A acting like a String.
A = 10/2

$ B=1
$ let B="$B+1"            # Let is internal to bash.
$ echo "B = $B"           # One is added to B was Behaving as an integer.
B = 2

$ A=1024                  # A Defaults to string
$ B=${A/24/STRING01}      # Substitute "24"  with "STRING01".
$ echo "B = $B"           # $B STRING is a string
B = 10STRING01

$ B=${A/24/STRING01}      # Substitute "24"  with "STRING01".
$ declare -i B
$ echo "B = $B"           # Declaring a variable with non-integers in it doesn't change the contents.
B = 10STRING01

$ B=${B/STRING01/24}      # Substitute "STRING01"  with "24".
$ echo "B = $B"
B = 1024

$ declare -i B=10/2       # Declare B and assigning it an integer value
$ echo "B = $B"           # Variable B behaving as an Integer
B = 5

বিকল্প অর্থ ঘোষণা করুন:

  • -এ পরিবর্তনশীল একটি অ্যারে।
  • -ফ শুধুমাত্র ফাংশন নাম ব্যবহার করুন।
  • -i পরিবর্তনশীলটিকে পূর্ণসংখ্যা হিসাবে বিবেচনা করতে হবে; ভ্যারিয়েবলকে একটি মূল্য নির্ধারিত করা হলে অঙ্ক গণিতের মূল্যায়ন হয়।
  • -p প্রতিটি ভেরিয়েবলের বৈশিষ্ট্য এবং মান প্রদর্শন করুন। -P ব্যবহার করা হলে অতিরিক্ত বিকল্পগুলি উপেক্ষা করা হয়।
  • -আর পঠনযোগ্য কেবল ভেরিয়েবলগুলি তৈরি করুন। এই ভেরিয়েবলগুলি পরবর্তী অ্যাসাইনমেন্ট স্টেটমেন্ট দ্বারা মান নির্ধারণ করা যাবে না এবং সেগুলি সেট করা যাবে না।
  • -t প্রতিটি ভেরিয়েবলের ট্রেস বৈশিষ্ট্য দিন।
  • -x পরিবেশের মাধ্যমে পরবর্তী কমান্ডগুলিতে রফতানির জন্য প্রতিটি ভেরিয়েবল চিহ্নিত করুন।

1

ব্যাশ ম্যানপেজে বেশিরভাগ ম্যানপ্যাজের চেয়ে কিছুটা বেশি তথ্য রয়েছে এবং এতে আপনি যা চাইছেন তার কিছু অন্তর্ভুক্ত রয়েছে। স্ক্রিপ্টিং বাশের এক দশকেরও বেশি সময় পরে আমার অনুমানটি হ'ল, 'এক্স এর এক্সটেনশন হিসাবে ইতিহাসের কারণে, এর কিছু ফানকি সিনট্যাক্স রয়েছে (sh এর সাথে পিছনে সামঞ্জস্য বজায় রাখতে)।

FWIW, আমার অভিজ্ঞতা আপনার মত ছিল; যদিও বিভিন্ন বই (যেমন, ও'রিলি "বাশ শেল শেখা" এবং অনুরূপ) সিনট্যাক্সের সাথে সহায়তা করে, বিভিন্ন সমস্যা সমাধানের প্রচুর অদ্ভুত উপায় রয়েছে এবং সেগুলির কয়েকটি বইতে নেই এবং এটি অবশ্যই গুগল করা উচিত।

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