Line / .bashrc এ এক লাইনে ফাংশন লিখুন


40

কেন যখন আমি একটি লাইনে কোনও ফাংশন .bashrcফাইলে লেখার চেষ্টা করি ,

list(){ ls -a }

আমি ত্রুটি পেয়েছি?

bash: /home/kasiya/.bashrc: line num: syntax error: unexpected end of file

কিন্তু আমি যখন এটি মাল্টি লাইনে লিখি ঠিক আছে?

list(){
    ls -a
}

স্ট্যাক ওভারফ্লো সম্পর্কে একটি পরে, সমমানের প্রশ্ন রয়েছে ।
সাম্পাব্লুকুপার

উত্তর:


33

এতে ফাংশনগুলি bashমূলত নামযুক্ত যৌগিক কমান্ড (বা কোড ব্লক)। থেকে man bash:

Compound Commands
   A compound command is one of the following:
   ...
   { list; }
          list  is simply executed in the current shell environment.  list
          must be terminated with a newline or semicolon.  This  is  known
          as  a  group  command. 

...
Shell Function Definitions
   A shell function is an object that is called like a simple command  and
   executes  a  compound  command with a new set of positional parameters.
   ... [C]ommand is usually a list of commands between { and },  but
   may  be  any command listed under Compound Commands above.

কোনও কারণ দেওয়া হয়নি, এটি কেবল বাক্য গঠন।

যেহেতু প্রদত্ত ওয়ান-লাইন ফাংশনে তালিকাটি কোনও নতুন লাইন বা এ দিয়ে শেষ করা হয়নি ;, bashঅভিযোগ করে।


42

;ফাংশন শেষে একটি প্রয়োজন আছে :

list(){ ls -a ; }

কাজ করা উচিত.

বাশের জন্য একটি ফাংশন সংজ্ঞা সিনট্যাক্স হিসাবে নির্দিষ্ট করা হয়

name () { list ; }

দ্রষ্টব্য যে এটিতে এমন একটি অন্তর্ভুক্ত রয়েছে ;যা এর অংশ নয় list

;এই জায়গায় প্রয়োজনীয় যেটি একটি সিনট্যাক্সের মতো বিপরীত। এটি bashসুনির্দিষ্ট নয় , এটি একইরকম ksh, তবে এটির ;প্রয়োজন নেই zsh


18

একটি একক কমান্ড (";") এর সমাপ্তি নতুন লাইনের দ্বারা বোঝানো হয়েছে। অনলাইন সংস্করণে }নিরবচ্ছিন্ন ls -aকমান্ডের যুক্তি হিসাবে পার্স করা হয়েছে । আপনি যদি এটি দেখতে পারেন তবে:

$ foo(){ echo "a" }
}
$ foo
a }

দেখুন কীভাবে ফাংশন ঘোষণার অভ্যন্তরে কমান্ডটি পিছনের কোঁকড়া ধনুর্বন্ধনী গ্রাস করে?


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