ফাংশন, এলিয়াস এবং এক্সিকিউটেবলের হাইফেন নিয়ে সমস্যা আছে?


25

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

যে কারণে আমি এটি করতে চাই তা হায়ফন একটি আন্ডারস্কোরের চেয়ে টাইপ করা সহজ, এবং তাই দ্রুত এবং মসৃণ।

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

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

হাইফেন এড়ানোর কোনও কারণ আছে কি?

উত্তর:


32

পজিক্স এবং হাইফেনস: কোনও গ্যারান্টি নেই

পসিএক্স স্ট্যান্ডার্ড অনুসারে একটি ফাংশনের নাম অবশ্যই একটি বৈধ নাম এবং একটি নাম থাকতে পারে:

৩.২৩১ নাম
শেল কমান্ড ভাষায়, পোর্টেবল অক্ষর সেট থেকে এককভাবে আন্ডারস্কোর, অঙ্ক এবং বর্ণমালা সমন্বিত একটি শব্দ। নামের প্রথম অক্ষরটি কোনও অঙ্ক নয়।

উপরন্তু, একটি উপনাম একটি বৈধ হতে হবে ওরফে নাম , যার মধ্যে গঠিত হতে পারে:

৩.১০ উপনামের নাম
শেল কমান্ডের ভাষায়, বহনযোগ্য অক্ষর সেট এবং নিম্নলিখিত বর্ণগুলির মধ্যে একটির দ্বারা আন্ডারস্কোর, অঙ্কগুলি এবং বর্ণমালা সমন্বিত একটি শব্দ: '!', '%', ',', '@'।

প্রয়োগগুলি একটি এক্সটেনশন হিসাবে ওরফে নামের মধ্যে অন্যান্য অক্ষরকে মঞ্জুরি দিতে পারে। (জোর আমার।)

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

হাইফেন সমর্থন করে না এমন শেলগুলির উদাহরণ

dash/bin/shডেবিয়ান-উবুন্টু পরিবারের ডিফল্ট শেল ( ) এবং এটি ফাংশন নামে হাইফেন সমর্থন করে না:

$ a-b() { date; }
dash: 1: Syntax error: Bad function name

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

$ a_b() { printf "hello %s\n" "$1"; }
$ alias a-b='a_b'
$ a-b world
hello world

ব্যস্তবক্স শেল (অলকুইস্ট শেল) ফাংশন নামে হাইফেন সমর্থন করে না:

$ a-b() { date; }
-sh: Syntax error: Bad function name

শেল দ্বারা হাইফেন সমর্থন সংক্ষিপ্তসার

নিম্নলিখিত শেলগুলি ফাংশন নামে হাইফেন সমর্থন করে:

  • ksh, বাশ, zsh

নিম্নলিখিত শেলগুলি ফাংশন নামে হাইফেন সমর্থন না করার জন্য পরিচিত :

  • ছাই (ব্যস্তবক্স), সিএসএস, টিসিএস, ড্যাশ

উপসংহার

  • হাইফেনগুলি মানহীন। আপনি যদি ক্রস শেল সামঞ্জস্য চান তবে এগুলি থেকে দূরে থাকুন।
  • হাইফেনের পরিবর্তে আন্ডারস্কোর ব্যবহার করুন: আন্ডারস্কোরগুলি সর্বত্র গৃহীত হবে।

2
এর মধ্যে নামগুলি -মন্দ। আমি আপনার দিকে তাকাচ্ছি, সিএসএস। :)
প্রধানমন্ত্রী 2 রিং

ধন্যবাদ। আমি পরবর্তী পরীক্ষিত cshএবং tcshতারা পারেন হাইফেন সমর্থন করি না, কিন্তু Korn থেকে শেল করেনি। এটি কিছুটা মজার যে আমি a-b()আমার ফাংশনটির নাম হিসাবেও ব্যবহার করেছি।
আইকনোক্লাস্ট

@ আইকনোক্লাস্ট আমি আপনার শেল পরীক্ষার ফলাফলগুলি উত্তরে যুক্ত করেছি added ধন্যবাদ।
1024

@ পিএম 2 রিংয়ের পরে তারা আন্ডারস্কোর সহ নামের চেয়ে টাইপ করা সহজ। যেসব সিস্টেম তাদের অনুমতি দেয় না তাদের traditionতিহ্য বা প্রয়োগের সিদ্ধান্তগুলি বাদ দিয়ে আপনি যে নীতিটি মন্দ তা দাবী করার পক্ষে কোন নীতিটি নির্দেশ করতে পারেন?
আইকনোক্লাস্ট

1
হাইফেন সহ @ আইকনোক্লাস্ট নামগুলি অনেক ভাষায় অসম্ভব, যেহেতু হাইফেনটিকে বিয়োগ চিহ্ন হিসাবে ব্যাখ্যা করা হয়, সুতরাং যদি এই জাতীয় ভাষার কোনও হাইফেনের সাথে নাম সমর্থন করে এমন কোনও ভাষার সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন হয় তবে আপনি অগোছালো পরিস্থিতি পেতে পারেন যেখানে হাইফেনেটেড নামের সংস্থাগুলি বাধ্য হয় অন্য ভাষায় আলাদা নাম রয়েছে।
প্রধানমন্ত্রী 2Ring

3

আমি জানি এটি সত্যিই দেরি হয়ে গেছে তবে সম্ভবত আপনি আন্ডারস্কোরটিকে আরও অ্যাক্সেসযোগ্য করার বিষয়ে আপনার সমস্যাটি নিয়ে কাজ করতে পারেন।

xmodmap -e "keycode  20 =  underscore minus"

এটি হাইফেন (বিয়োগ) সহ আন্ডারস্কোরটি স্যুইচ করবে।

সুতরাং এখন, আপনি হাইফেনের জন্য শিফ্ট ধরেছেন, তবে একটি আন্ডারস্কোর শিফ্ট ছাড়াই টাইপ করা হয়েছে।

আপনার কীকোড ভিন্ন হতে পারে, তবে আমি মনে করি এটি আপনার কীবোর্ডের উপর নির্ভর করে; খনিটি 20 হতে হবে। আপনার কী কী কোডটি ব্যবহার করা উচিত তা সন্ধানের জন্য যদি আপনার সহায়তা প্রয়োজন হয় তবে আমাকে জানান let

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