একক অক্ষর বিকল্পের জন্য le -` একক ড্যাশ, তবে শব্দের জন্য ডাবল ড্যাশ `--`?


51

শব্দের জন্য অক্ষর এবং ডাবল ড্যাশগুলির জন্য একক ড্যাশগুলি ব্যবহার করার কনভেনশনটি কোথা থেকে এসেছে এবং কেন ব্যবহার অব্যাহত রয়েছে?

উদাহরণস্বরূপ যদি আমি টাইপ করি তবে ls --helpআপনি দেখতে পাবেন:

  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print octal escapes for nongraphic characters
      --block-size=SIZE      use SIZE-byte blocks
  -B, --ignore-backups       do not list implied entries ending with ~
...

আমি - and -- conventionঅল্প সাফল্যের সাথে উদ্ধৃতি দিয়েও গুগল করার চেষ্টা করেছি ।


6
এখানে শুধু নিট-পিক হচ্ছে, তবে চরিত্রটিকে -প্রযুক্তিগতভাবে হাইফেন বলা হয় । আমরা বেশিরভাগ ক্ষেত্রে এম ড্যাশ (-) উল্লেখ করার জন্য "ড্যাশ" শব্দটি ব্যবহার করি এবং কখনও কখনও এন ড্যাশ (-) ব্যবহার করি, তবে এর কোনটি হাইফেন (-) নয়।
ছারভে

4
এটি সত্যই আমাকে বিরক্ত করে যখন সুপরিচিত প্রোগ্রামগুলি সম্মেলনটি অনুসরণ করে না, যদিও:java -version
কিম্বারলি ডব্লিউ

4
@ জামিল হ্যাঁ আমি কেন ভেবে ভেবে অবসান করেছি এখানেfind . -delete
ক্রিজিসটফ ভেন্ডি

এর ধারণাটি হ'ল যাতে আপনি এমন কিছু লিখতে পারেন -abযা উভয়কে সক্রিয় করে aএবং b। ডবল ড্যাশ ছাড়া, -helpসক্রিয় হবে h, e, l, এবং pঅপশন।
অ্যারন ফ্র্যাঙ্ক

উত্তর:


61

ইন ইউনিক্স প্রোগ্রামিং আর্ট এরিক স্টিভেন রেমন্ড বর্ণনা কিভাবে এই অভ্যাস প্রসূত:

মূল ইউনিক্স traditionতিহ্যে, কমান্ড-লাইন বিকল্পগুলি হ'ল একক হাইফেনের পূর্বে একক অক্ষর ... আসল ইউনিক্স স্টাইলটি ধীরে ধীরে ASR-33 টেলি টাইপগুলিতে বিকশিত হয়েছিল যা সংক্ষিপ্তকরণকে পুণ্য তৈরি করে; এইভাবে একক-বর্ণের বিকল্পগুলি। শিফট কী ধরে রাখার জন্য প্রকৃত প্রচেষ্টা প্রয়োজন; সুতরাং নিম্নতর ক্ষেত্রে পছন্দ এবং বিকল্পগুলি সক্ষম করতে "-" (সম্ভবত আরও যুক্তিসঙ্গত "+" এর চেয়ে বেশি) ব্যবহার।

জিএনইউ স্টাইল দুটি হাইফেনের পূর্ববর্তী বিকল্প কীওয়ার্ডগুলি (কীওয়ার্ডের অক্ষরের পরিবর্তে) ব্যবহার করে। এটি বেশ কয়েক বছর পরে বিকশিত হয়েছিল যখন কিছু পরিবর্তিত জিএনইউ ইউটিলিটিগুলি সিঙ্গল-লেটার বিকল্প কীগুলি ( এই লক্ষণটির জন্য একটি প্যাচ গঠন করেছিল, অন্তর্নিহিত রোগের নিরাময়ের জন্য নয় )। এটি জনপ্রিয় রয়ে গেছে কারণ পুরানো শৈলীর বর্ণমালার স্যুপের তুলনায় জিএনইউ বিকল্পগুলি পড়া সহজ। 1

[1] http://www.faqs.org/docs/artu/ch10s05.html


নোট করুন যে getopt () প্রথম 1985 সালে প্রকাশিত হয়েছিল, তবে UNOS (প্রাচীনতম UNIX ক্লোন) 1982 সালে getargs () ইতিমধ্যে প্রকাশিত হয়েছিল (এটি 1980 সালে লেখা হয়েছিল) এবং getargs () সংক্ষিপ্ত বিকল্পগুলি এবং একক ড্যাশ দীর্ঘ বিকল্পগুলি (মাল্টিক্স শৈলী) সমর্থন করে। ইউএনওএস ব্যাপকভাবে একক ড্যাশ দীর্ঘ বিকল্পগুলি ব্যবহার করে এবং ইউএনওএস লিখেছিলেন প্রাক্তন এটিএন্ডটি কর্মচারীরা। 1988 সালে, ইউএনওএস যাচাই করেছে যে একক ড্যাশ দীর্ঘ বিকল্পগুলি দুর্দান্ত কাজ করে।
স্কিলি

28

একক চিঠি বিকল্প ব্যবহার অবিরত রাখার জন্য একটি কারন কারণ তারা একসাথে গ্রথিত করা যেতে পারে: ls -ltrএকটি হল অনেক বেশি টাইপ করা আরো সহজ ls --sort=time --reverse --format=long। দু'বার ব্যবহার করা ভাল There এই বিষয়টির সন্ধানের জন্য, "ইউনিক্স কমান্ড লাইন বিকল্পগুলির সম্মেলন" চেষ্টা করুন try


1
+1 ধন্যবাদ এটি বাস্তবায়নের পিছনে যুক্তি দিয়ে সত্যই সহায়তা করে।
ল্যারি

যেহেতু ইউনিক্স এলএস বুঝতে ls --sort=time --reverse --format=longপারে না এই মানহীন পদ্ধতির উল্লেখ করা ভাল ধারণা নয়।
স্কিলি

6

রেমন্ড থেকে উদ্ধৃতি @jasonwryan কিছু দরকারী তথ্য আছে, কিন্তু গল্প মাঝখানে শুরু হয়:

  • মনে রাখবেন যে ইউনিক্স মাল্টিক্সের একটি হ্রাস-স্কোপ সংস্করণ হিসাবে শুরু হয়েছিল এবং এর ইতিহাস জুড়ে ইউনিক্সের বৈশিষ্ট্যগুলি প্রায়শই অন্যান্য সিস্টেমে দেখা এবং ব্যবহৃত বৈশিষ্ট্যগুলির অনুকরণ বা রূপান্তর ছিল।
  • '-'বিকল্প চরিত্র Multics -এর ব্যবহার করা হতো। বিটসেভারের ব্যবহারকারীর কমান্ডগুলির জন্য একটি ম্যানুয়াল রয়েছে ।
  • অন্যান্য সিস্টেমে বিভিন্ন অক্ষর ব্যবহার করা হয়েছিল, কেউ কেউ আরও কী-স্ট্রোক-দক্ষ হিসাবে দাবি করেছেন (যেমন '/'টপস এবং ভিএমএসের জন্য ব্যবহৃত) এবং কিছুটা কম (যেমন '('ভিএম / এসপি সিএমএসে ব্যবহৃত হয়)।
  • মাল্টিক্স বিকল্পগুলি বহু- চরিত্রযুক্ত ছিল, উদাহরণস্বরূপ, কীওয়ার্ডগুলি আন্ডারস্কোর দ্বারা পৃথক করা।
  • দীর্ঘতর মাল্টিক্স বিকল্পগুলির ঘন ঘন একটি সংক্ষিপ্ত, সংক্ষিপ্ত আকার থাকে যেমন -printবনাম -pr(পৃষ্ঠা 3-8)।
  • ইউনিক্স বিকল্পগুলি একক-চরিত্রযুক্ত ছিল এবং বেশ কয়েক বছর পরে, getoptএটি চালু হয়েছিল। যেহেতু এটি মূল ইউনিক্সের অংশ ছিল না, এমন কিছু ইউটিলিটি রয়েছে যা ব্যবহার করে নি getoptএবং যেমনটি রয়েছে তেমন রেখে দেওয়া হয়েছে। তবে getoptপ্রোগ্রামগুলি ধারাবাহিকভাবে তৈরিতে সহায়তা করেছেন।

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

  • 1985 এর প্রথম দিকে, আমি একটি প্রোগ্রামে কাজ করছিলাম যা প্রাইমস-এ পোর্ট করতে হয়েছিল । প্রাইমের বিকাশকারীরা একটি কমান্ড-ভাষা অফার করে অন্যান্য কয়েকটি সংস্থার সাথে প্রতিযোগিতা করেছিল যা তাদের অন্যদের থেকে সর্বাধিক ব্যবহৃত কমান্ড সরবরাহ করে others অবশ্যই তারা সংক্ষিপ্তসারগুলি সমর্থন করেছিল (ভিএমএসের মতো)। অনলাইন সহায়তা পড়ার পরে, টাইপ করে sta, পাওয়ার জন্য ভেবেছিলাম status। এটি ছিল সংক্ষিপ্তসার startএবং শুরু করার জন্য কিছুই না দিয়ে , কমান্ড ইন্টারপ্রেটার আমাকে লগ অফ করেছিল।
  • এক্স টুলকিট ( এক্সটার্ম দ্বারা ব্যবহৃত ) সংক্ষিপ্ত বিকল্পগুলি অনুমোদন করে। এক্সটারেমে এটি কার্যকরভাবে ব্যবহার করতে, এটি -v(সংস্করণের জন্য) ওভার -vb(ভিজ্যুয়াল বেল) পছন্দ করতে কমান্ড প্যারামিটারগুলি প্রিপ্রোসেস করতে হবে । অস্পষ্টতা যখন থাকে তখন এক্স টুলকিটের পছন্দসই বিকল্পটি নির্দিষ্ট করার সরাসরি কোনও উপায় নেই।

অস্পষ্টতার জন্য এই সম্ভাবনার কারণে, কিছু বিকাশকারী সংক্ষিপ্তসারগুলিকে অনুমতি না দেওয়া পছন্দ করে। লিঙ্কস , উদাহরণস্বরূপ, সংক্ষিপ্তসারগুলি ছাড়াই বহু-চরিত্রের বিকল্পগুলি ব্যবহার করে।

সমস্ত প্রোগ্রাম ব্যবহৃত হয় না getopt: tarএবং psনা। না rcs(বা sccs) যেমনটি আপনি ড্যাশ optionচ্ছিক ছিল তা লক্ষ করে দেখতে পাবেন এবং বিকল্প মানগুলি wereচ্ছিক ছিল were

এগুলি সব বিবেচনায় নিয়ে, জিএনইউ বিকাশকারীরা getoptপ্রতিটি সংক্ষিপ্ত বিকল্পের দীর্ঘ সংস্করণ সরবরাহ করে অন্যান্য সিস্টেমে ব্যবহৃত কীওয়ার্ড বিকল্পগুলি রূপান্তর করে । উদাহরণস্বরূপ, পাঠ্যসূচিগুলি 1.0 চেঞ্জলগ বলে

Tue May  8 03:41:42 1990  David J. MacKenzie  (djm at abyss)

        * tac.c: Use regular expressions as the record boundaries.
        Give better error messages.
        Reformat code and make it more readable.
        (main): Use getopt_long to parse options.

ফাইলিউটিলের পরিবর্তন আগে ছিল:

Tue Oct 31 02:03:32 1989  David J. MacKenzie  (djm at spiff)

        * ls.c (decode_switches): Add long options, using getopt_long
        instead of getopt.

এবং কেউ ইতিমধ্যে এটির সন্ধান করতে পারে তবে মনে হয় ফাইল-শিরোনামটি প্রথম দিকের তারিখটি দেখায়:

/* Getopt for GNU.
   Copyright (C) 1987, 1989 Free Software Foundation, Inc.

যা এক্স টুলকিট (1987) এর সাথে একযোগে (উদাহরণস্বরূপ)। ইউনিক্স ইউটিলিটিগুলির সাথে আপনি পরিচিত যা (যেমন ls, ps) বিদ্যমান একক-অক্ষর বিকল্পগুলি ব্যবহার করে যার জন্য ম্যানুয়ালটিতে পর্যায়ক্রমিক পরিদর্শন প্রয়োজন। প্রবর্তন করার সময় getopt_long, জিএনইউ বিকাশকারীরা প্রথমে নতুন বিকল্প যুক্ত করে এটি করেননি ; তারা বিদ্যমান বিকল্পগুলি টেবুলেট করে এবং একটি দীর্ঘতর মাপের বিকল্প সরবরাহ করে began

যেহেতু তারা একটি বিদ্যমান তালিকাতে যুক্ত হচ্ছিল , বিদ্যমান বিকল্পগুলির সাথে (আবার) সংঘাতের সমস্যা ছিল। এটি এড়াতে, তারা দীর্ঘ বিকল্পগুলির আগে দুটি ড্যাশ ব্যবহার করে সিনট্যাক্সটি পরিবর্তন করেছিল।

এই প্রোগ্রামগুলি getopt_longসাধারণ কারণে এই পদ্ধতিতে ব্যবহার অব্যাহত থাকে :

  • স্ক্রিপ্টগুলি বিকল্পগুলির উপর নির্ভর করে; বিকাশকারীরা স্ক্রিপ্টগুলি ভাঙ্গতে উদ্বিগ্ন নন
  • এখানে একটি লিখিত কোডিং মান রয়েছে (যা কার্যকর হতে পারে)
  • কেউ প্রতিযোগিতামূলক সরঞ্জামগুলির সাথে উপস্থিত হননি যা স্পষ্টতই বেমানান (বিএসডি এবং জিএনইউ বিকাশকারী উভয়ই একে অপরের বিকল্পের নামগুলি অনুলিপি করে)

3

উইকিপিডিয়া কমান্ড-লাইন ইন্টারফেসে এটি রিপোর্ট করা হয়:

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


কনভেনশনটি কোথা থেকে এসেছে এবং কেন এটি ব্যবহার করা হচ্ছে, এই প্রশ্নের উত্তর দেয় না।
ছারভে

1

আমার অনুমান যে আরও বর্ণনামূলক বিকল্পগুলি পছন্দসই ছিল এবং দীর্ঘতর বিকল্পগুলির সাথে আপনাকে একক অক্ষরের বিকল্পগুলি শেষ হয়ে যাওয়ার বিষয়ে চিন্তা করতে হবে না।

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

আমি সম্প্রতি getopt_long () ব্যবহার করেছি এবং আমি দীর্ঘ বিকল্পগুলি পছন্দ করতে শুরু করি কারণ সেগুলি স্মরণ করা এবং স্ব নথিভুক্ত করা সহজ। আমার যদি নিম্নলিখিত দুটি কমান্ড থাকে:

./aggregator -f 15

./aggregator - ফ্লাশ সময় 15

আমি বলব লম্বা বিকল্পটি ব্যবহার করে দ্বিতীয়টিটি স্ব-বর্ণনামূলক।


0

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

বলা হচ্ছে, আমি জানি যে এখানে এমন অনেকগুলি সরঞ্জাম রয়েছে যা একটি দীর্ঘ বিকল্পের জন্য একক হাইফেন ব্যবহার করে বা হাইফেনগুলি পুরোপুরি মুক্তি দেয়। এই সরঞ্জামগুলি প্রথমে কঠিন হতে পারে এবং অন্যথায় একীভূত সিস্টেমে ওয়ার্ট হিসাবে আটকানো থাকে।

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

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