পাইপের পাশের জায়গাগুলি


17

আমি দেখেছি history | grep blahএবং history |grep blah; এবং history|grep blahকাজ করে, যদিও কেউ কখনও এটি ব্যবহার করে না বলে মনে হয়।

ফাঁকা জায়গাগুলির কোনও তাত্পর্য আছে (যেমন বিভিন্ন কমান্ডে / থেকে পাইপিংয়ের জন্য স্পেসের বিভিন্ন ব্যবহারের প্রয়োজন হয়), বা এটি সর্বদা নির্বিচারে হয়?


13
পঠনযোগ্যতা, বেশিরভাগ ক্ষেত্রে।
জেসনওয়ারিয়ান

1
|পাইপ বা ;সেমিকোলন কমান্ডের বিভাজক হিসাবে বেশিরভাগ শেল (bash, ksh, tcsh) দ্বারা ব্যবহৃত হয়। আগে এবং পরে উদ্ধৃতি সাদা স্থান আবদ্ধ হয় না যখন হয়।
আরচেমার 20

উত্তর:


24

bashবেশ কয়েকটি মেটাচার্যাক্টর সংজ্ঞায়িত করে । থেকে man bash:

metacharacter
একটি চরিত্র যে, যখন unquoted, আলাদা শব্দ। নিম্নলিখিতগুলির মধ্যে একটি:
| &; () <> স্পেস ট্যাব

যেহেতু মেটাচারাররা পৃথক পৃথক শব্দ, তারা স্পেস দ্বারা ঘিরে রয়েছে কিনা তা বিবেচ্য নয়। পাইপ প্রতীক, |একটি মেটাচ্যারাক্টর এবং অতএব, আপনি যেমনটি লক্ষ্য করেছেন, এর চারপাশে ফাঁকা জায়গাগুলির প্রয়োজন নেই।

মনে রাখবেন যে, [, ], {, }, এবং =হয় না metacharacters। বিপরীতে তাদের অর্থ, তারা ফাঁকা দ্বারা ঘিরে আছে কিনা তা দৃ strongly়ভাবে নির্ভর করে।

কখন স্পেস রয়েছে এবং এর প্রয়োজন নেই তার উদাহরণ

যেমন আপনি লক্ষ্য করেছেন, এটি |ফাঁকা স্থান দ্বারা ঘিরে রয়েছে কিনা তা বিবেচ্য নয়। আসুন আমরা কয়েকটি উদাহরণ বিবেচনা করি যা সাধারণত ব্যাশ ব্যবহারকারীদের বিভ্রান্ত করে। বিবেচনা:

$ (date)
Sun Mar  1 12:47:07 PST 2015

উপরের প্যারেনগুলি dateকমান্ডটি সাব-শেলের মধ্যে চালিত করতে বাধ্য করে । কারণ (এবং )মেটাচার্যাক্টর, কোনও স্পেসের প্রয়োজন নেই। বিপরীতে:

$ {date}
bash: {date}: command not found

যেহেতু {এবং }হয় না metacharacters, শেল একইরূপে {date}এক শব্দ হিসাবে। dateকমান্ডটি সন্ধান করার পরিবর্তে এটি নামের একটি আদেশের সন্ধান করে {date}। কারণ এটি একটি খুঁজে পায় না, একটি ত্রুটির ফলাফল।

আর একটি সাধারণ সমস্যা হ'ল testকমান্ড। নিম্নলিখিতটি সফলভাবে কাজ করে:

$ [ abc ] && echo Yes
Yes

স্পেসগুলি সরান এবং একটি ত্রুটি ঘটে:

$ [abc] && echo Yes
bash: [abc]: command not found

কারণ [এবং ]হয় না metacharacters, শেল একইরূপে [.bashrc]একটি একক শব্দ এবং এর ফলে শুধু মত dateউদাহরণ, একটি ত্রুটি নেই।

অ্যাসাইনমেন্টের বিবৃতিগুলি ফাঁকা জায়গাগুলির প্রতিও সংবেদনশীল। নিম্নলিখিত অ্যাসাইনমেন্টটি সফল:

$ v=date
$ echo $v
date

একটি স্থান যুক্ত করুন এবং অ্যাসাইনমেন্ট ব্যর্থ:

$ v= date
Sun Mar  1 12:55:05 PST 2015

উপরের শেলটি অস্থায়ীভাবে vখালি হয়ে যায় এবং তারপরে dateকমান্ডটি কার্যকর করে।

এর আগে একটি স্থান যুক্ত =করাও ব্যর্থতার কারণ হয় তবে ভিন্ন কারণে:

$ v =date
bash: v: command not found

এখানে, শেল vআর্গুমেন্ট দিয়ে কমান্ডটি কার্যকর করার চেষ্টা করে =date। ত্রুটিটি কারণ এটি কোনও আদেশের নাম পাওয়া যায় নি v


1
আমি সম্প্রতি অ্যাসাইনমেন্ট স্টেটমেন্টের শিকার হয়েছি। আমার আগে এবং পরে জায়গা ছিল =। ডিবাগ করতে কিছুক্ষণ সময় নিল।
শীর্ষ

3

পাইপ আপনাকে অন্য একটির ইনপুট হিসাবে প্রোগ্রামের আউটপুট ব্যবহার করতে দেয় ...

যতদূর পর্যন্ত স্পেস, @ জেসনওয়ারিয়ান এর মতো পাঠ্যতা / কর্মীদের পছন্দ বিবেচনা করার ক্ষেত্রে এটি কেবল বিষয়।

"|" এর আগে ও পরে একটি স্পেস বার আদর্শ ...

আপনি এটি কেবল একটি এক লাইনার পরিষ্কার না করে আপনার আউটপুটও কলাম-টি দিয়ে ব্যবহার করতে পারেন।

lnydex99uhc:depot_r user$ lsof | grep my | column -t
Microsoft  290  user  txt  REG  1,4  9515016  170972    /Library/Fonts/PCmyoungjo.ttf
bash       359  user  cwd  DIR  1,4  714      12246074  /Users/zatef/hw2/base/active/myapp

2

একটি ক্ষেত্রে রয়েছে যেখানে এটি ফাঁকা স্থান না ব্যবহারে কার্যকর হতে পারে। আপনি যদি ইউএস-আমেরিকান লেআউটটি ব্যবহার না করে থাকেন তবে আপনাকে AltShiftLকোনও পাইপ ইনপুট করার মতো কিছু সংমিশ্রণ ব্যবহার করতে বাধ্য করা যেতে পারে । যদিও এটি প্রতি প্রতি সমস্যা নয়, এর একটি পরিণতি হ'ল কখনও কখনও আপনি অক্ষরের আগে বা পরে মুদ্রণবিহীন অক্ষরগুলিও ইনপুট করেন। উদাহরণস্বরূপ, একটি ফরাসি ম্যাকবুক প্রো কীবোর্ডে আমাকে AltShiftLইনপুট ব্যবহার করতে হবে |। আপনি যখন দ্রুত টাইপ করবেন, আপনি দুর্ঘটনাক্রমে এটি টাইপ করতে পারেন: AltShift( L, Space)

$ sudo dmesg | tail
zsh: command not found:  tail

echo "sudo dmesg | tail" | od -a
0000000    s   u   d   o  sp   d   m   e   s   g  sp   |         t   a
0000020    i   l  nl

যদি আপনি সচেতন না হন যে AltShiftSpaceএকটি পৃথক স্থান (অ-ব্রেকিং-স্পেস ( U + 00A0 )) ইনপুট করে তবে নিম্নলিখিত ত্রুটিটি বোঝা শক্ত হতে পারে:zsh: command not found:  tail


1

এই ক্ষেত্রে স্পেসগুলির একমাত্র তাত্পর্য হ'ল নান্দনিকতা।
অথবা অন্য কথায় কমান্ডগুলি মানুষের কাছে আরও পঠনযোগ্য করে তোলে।

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