কিছু ক্ষেত্রে কী কী বাশ (বা অন্যান্য শেল) স্ক্রিপ্টগুলিতে স্পেসের সংখ্যা গুরুত্বপূর্ণ


14

আমাকে বলা হয়েছে যে ফাঁকা স্থানগুলি bashঅন্যান্য শেল স্ক্রিপ্টগুলিতে গুরুত্বপূর্ণ এবং আমি কী করছি তা না জানলে আমার স্পেসগুলির অস্তিত্ব পরিবর্তন করা উচিত নয়। "অস্তিত্ব পরিবর্তন" এর অর্থ হ'ল দুটি অ-স্থানের অক্ষরের মধ্যে একটি স্থান সন্নিবেশ করানো বা দুটি অ-স্থানের অক্ষরের মধ্যে একটি স্থান সরিয়ে নেওয়া, যেমন পরিবর্তিত var="$val"হওয়া var ="$val"বা বিপরীতে। আমি জিজ্ঞেস করতে চাই

শেল স্ক্রিপ্টে একটি একক স্পেস ব্যবহার করা বা একাধিক পরপর স্পেস ব্যবহার করা কোনও তাত্পর্য তৈরি করে এমন কোনও মামলা রয়েছে কি?

(অবশ্যই কার্ডটা লাগানোর / উদ্ধৃতির মধ্যে একটি স্থান মোছার একটি পার্থক্য থেকে পরিবর্তন করে তোলে echo "a b"করতে echo "a b"বা বিপরীতভাবে ভাইস। আমি এই তুচ্ছ উদাহরণ ছাড়া অন্য উদাহরণ খোঁজ করছি।)

আমি এই প্রশ্নটি জুড়ে এসেছি তবে একটি হ'ল দুটি ফাঁকা স্থানবিহীন অক্ষরের মধ্যে ফাঁকা স্থান যুক্ত করার এবং অপসারণ করার জন্য যার জন্য আমি অনেকগুলি উদাহরণ জানি যা এটি একটি পার্থক্য তৈরি করবে।

কোন সাহায্য প্রশংসা করা হবে। সম্ভব হলে আরও বিভিন্ন ধরণের শেল অন্তর্ভুক্ত করুন।

উত্তর:


19

উদ্ধৃতিগুলির বাইরে, শেলটি শব্দের / টোকেন বিভাজক হিসাবে সাদা স্থান (স্পেস, ট্যাব, নিউলাইন, ক্যারেজ-রিটার্ন, ইত্যাদি) ব্যবহার করে। এর মানে:

  • হোয়াইটস্পেস দ্বারা পৃথক না করা বিষয়গুলি একটি "শব্দ" হিসাবে বিবেচিত হয় ।
  • এক বা একাধিক সাদা স্থানের অক্ষর দ্বারা পৃথক করা বিষয়গুলি দুটি (বা আরও) শব্দ হিসাবে বিবেচিত হয়।

কমপক্ষে একটি হিসাবে যতক্ষণ না প্রতিটি "জিনিস" এর মধ্যে শ্বেতস্পেসের অক্ষরের প্রকৃত সংখ্যা গুরুত্বপূর্ণ নয়।


ধন্যবাদ. আমি নিজে কোনও পাল্টা উদাহরণ খুঁজে পাচ্ছি না। আমি শুধু নিশ্চিত করতে চাই
ওয়েইজুন

2
বাশ ফর্ম ফিড এবং উল্লম্ব ট্যাবগুলিকে হোয়াইটস্পেস হিসাবে বিবেচনা করে।
এফএমপুরফি

সত্য। আমি মূলত '... নিউলাইনস, ইত্যাদি' লিখেছিলাম এবং তারপরে এটিকে পরিবর্তন করে স্পষ্টভাবে ক্যারেজ-রিটার্ন যুক্ত করতে পারি। দুর্ঘটনাক্রমে 'ইত্যাদি' বাদ পড়েছে।
ক্যাস

স্পেসের সংখ্যা এত বড় হলে, প্রোগ্রামটি মেমরির সাথে মাপসই করতে পারে না?
Worse_Username

7
@ ওয়ার্স_উজারনেম হোয়াইটস্পেস মেমরির সাথে মানানসই নয়। আমি সবেমাত্র 8 গিগাবাইট র‌্যাম এবং 20 গিগাবাইট সোয়াপ সহ একটি মেশিনে একটি 48 গিগাবাইট স্ক্রিপ্ট তৈরি করেছি। এটা ঠিক ছিল। এই 3 টি সাদা স্থানের ক্রাচ করতে 3 মিনিট সময় লাগল, কিন্তু শেষ পর্যন্ত এটি echoকমান্ড এবং যুক্তির মধ্যে এতটাই সাদা স্থান সহ সফলভাবে একটি কমান্ড চালিয়েছিল।
ক্যাস্পার্ড

23

এটি সম্ভবত প্রতারণা করছে তবে এটি:

rm foo\ bar         # "delete the file named 'foo bar'"

এটি থেকে পৃথক:

rm foo\  bar        # "delete the files named 'foo ' and 'bar'"

যদিও শূণ্যস্থান আছে না উদ্ধৃতির মধ্যে। ;-)

আরও বিস্ময়করভাবে, এটি:

rm \
    foo          # "delete the file named 'foo'"

এটি থেকে পৃথক:

rm \ 
    foo          # "delete the file named ' ', then run the command 'foo'"

যদিও তারা দেখতে অভিন্ন!


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

12

আমরা স্থান অক্ষর (সম্পর্কে কথা বলতে না থাকলে U+0020), কিন্তু কোনো হোয়াইটস্পেস অক্ষর ( U+0020, \n, \tএখানে-দস্তাবেজ:, ইত্যাদি), তারপর এক নির্দিষ্ট ক্ষেত্রে আমার মন থেকে আসা।

এই কোড (স্পেস ব্যবহার করে):

cat <<- 'EOF'
<space><space>foo
EOF

মুদ্রণ করবে:

  foo

তবে এই কোড (ট্যাব ব্যবহার করে):

cat <<- 'EOF'
<tab><tab>foo
EOF

মুদ্রণ করবে:

foo

এটি কারণ ( পসিক্স হিসাবে বলা হয়েছে ):

যদি পুনঃনির্দেশ অপারেটর হয় তবে <<-সমস্ত শীর্ষস্থানীয় <ট্যাব> অক্ষরগুলি ইনপুট লাইন এবং পিছনের ডিলিমিটার যুক্ত লাইন থেকে সরিয়ে নেওয়া হবে।


1
সেটা মজাদার. আমি এখানে-নথি সম্পর্কে চিন্তা করেছি কিন্তু <<-অপারেটরকে চিনি না । আপনাকে অনেক ধন্যবাদ.
ওয়েইজুন

এখানে নথিগুলি শেল কোড নয়, উদ্ধৃত পাঠ্যের একটি ফর্ম। শেল শব্দ বিভাজন প্রযোজ্য নয়।
ক্যাস

2

অ্যাসাইনমেন্ট স্টেটমেন্ট লেখার সময়ও এর প্রভাব রয়েছে। আমি যদি বলি FOO=xyzএটি FOOমান সহ একটি পরিবেশের পরিবর্তনশীল তৈরি করবে xyzতবে আমি যদি একটি স্থানের সাথে সমানকে আলাদা করি তবে এটি মনে করবে যে আমি FOOআর্গের সাথে নামক একটি প্রোগ্রামটি আহ্বান করছি =xyz। এটি নির্দিষ্ট সিনট্যাক্সের জন্য আসে তাই এটি বিবেচনা করে।


সাধারণত FOO=xyzএকটি অভ্যন্তরীণ শেল পরিবর্তনশীল তৈরি করে তবে পরিবেশ পরিবর্তনশীল নয়। আপনার প্রয়োজন হয় set -aবা তার export FOO=xyzজন্য (যেমন এটিকে সাব -হেল সাব-প্রসেসিসগুলির পরিবেশের অংশ হিসাবে তৈরি করা)।
হউক লেগেছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.