কেন ডাবল উক্তি ব্যবহার করে ছত্রাকের ক্রিয়াকলাপগুলি বদ্ধ করার জন্য একক উদ্ধৃতি ব্যবহার করার সময় তাদের তুলনায় আলাদা ফলাফল দেয়?


8

আমি যদি awk এর ক্রিয়া বিবৃতিটি বন্ধ করতে একক উদ্ধৃতি ব্যবহার করি তবে এটি প্রত্যাশার মতো কাজ করে:

$ dpkg -l | grep "linux\-[a-z]*\-" | awk {'print $2'}
linux-headers-3.13.0-27
linux-headers-3.13.0-27-generic
linux-headers-3.14.4-031404
linux-headers-3.14.4-031404-generic
linux-headers-generic
linux-image-3.13.0-27-generic
linux-image-3.14.4-031404-generic
linux-image-extra-3.13.0-27-generic
linux-image-generic
linux-libc-dev:i386
linux-sound-base

তবে আমি যদি তাদের ঘেরে ডাবল উদ্ধৃতি ব্যবহার করি তবে এটি নির্দিষ্ট কলাম / ক্ষেত্রের পরিবর্তে পুরো লাইনটি মুদ্রণ করে:

$ dpkg -l | grep "linux\-[a-z]*\-" | awk {"print $2"}
ii  linux-headers-3.13.0-27                    3.13.0-27.50                                           all          Header files related to Linux kernel version 3.13.0
ii  linux-headers-3.13.0-27-generic            3.13.0-27.50                                           i386         Linux kernel headers for version 3.13.0 on 32 bit x86 SMP
ii  linux-headers-3.14.4-031404                3.14.4-031404.201405130853                             all          Header files related to Linux kernel version 3.14.4
ii  linux-headers-3.14.4-031404-generic        3.14.4-031404.201405130853                             i386         Linux kernel headers for version 3.14.4 on 32 bit x86 SMP
ii  linux-headers-generic                      3.13.0.27.33                                           i386         Generic Linux kernel headers
ii  linux-image-3.13.0-27-generic              3.13.0-27.50                                           i386         Linux kernel image for version 3.13.0 on 32 bit x86 SMP
ii  linux-image-3.14.4-031404-generic          3.14.4-031404.201405130853                             i386         Linux kernel image for version 3.14.4 on 32 bit x86 SMP
ii  linux-image-extra-3.13.0-27-generic        3.13.0-27.50                                           i386         Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
ii  linux-image-generic                        3.13.0.27.33                                           i386         Generic Linux kernel image
ii  linux-libc-dev:i386                        3.13.0-27.50                                           i386         Linux Kernel Headers for development
ii  linux-sound-base                           1.0.25+dfsg-0ubuntu4                                   all          base package for ALSA and OSS sound systems

এটা এমন কেন? কেন ডাবল উক্তি ব্যবহার করে ছত্রাকের ক্রিয়াকলাপগুলি বদ্ধ করার জন্য একক উদ্ধৃতি ব্যবহার করার সময় তাদের তুলনায় আলাদা ফলাফল দেয়? আমি কি এমন কিছু করতে পারি যাতে ডাবল উদ্ধৃতি ব্যবহার করে এনক্লোজিং একক উদ্ধৃতি ব্যবহার করে এনক্লোজিংয়ের মতো কাজ করে?


কোঁকড়া ধনুর্বন্ধনী এর বাইরে একক উদ্ধৃতি ব্যবহার করার চেষ্টা করুন।
অবিনাশ রাজ

@ অভিনাশরাজ এটি একটি সিনট্যাক্স ত্রুটি তৈরি করবে, সমস্ত ক্রিয়া বিবৃতি এতে থাকা awkউচিত { ... }
আদিত্য

কে বলে যে এটি সিনট্যাক্স ত্রুটি তৈরি করবে? অজানা সিসট্যাক্সটি এমন হবে awk 'condition1{action1} condition2 {action2}'। যদি আমরা এইভাবে অর্ডিক কমান্ড দিই তবে এর awk '{print $1}'মানে নেই যে কোনও শর্ত দেওয়া হয়নি।
অবিনাশ রাজ

আমি বলিনি তোমার আদেশটি awk {'print $2'}ভুল is আমি বলেছিলাম, ধনুর্বন্ধনীগুলির মধ্যে একক উদ্ধৃতিগুলি এড়ানো ভাল because কারণ এটি আপনাকে বিভ্রান্ত করবে।
অবিনাশ রাজ

@ অবিনাশরাজ ওহ .. আমি ভেবেছিলাম আপনি অন্যরকম কিছু বোঝাতে চেয়েছেন
আদিত্য

উত্তর:


6

আপনি যদি ডাবল কোট ব্যবহার করেন $2তবে শেলের দ্বারা প্রতিস্থাপিত হওয়ার আগে awkডাকা হবে। যেমনটি $2খালি চলমান

awk {"print $2"}

চলমান হিসাবে একই

awk {"print "}

ব্যবহার

awk {"print \$2"}

আপনি যদি ডাবল উদ্ধৃতি ব্যবহার করতে চান।


আমি ম্যানুয়ালগুলিতে তাকিয়ে দেখছি কখন শেল বিস্তৃত হয় । এটি একক উদ্ধৃতি বা ডাবল উদ্ধৃতি সম্পর্কে কিছুই উল্লেখ করে না। একক-কোটের ক্ষেত্রে সম্প্রসারণ কেন করা হয় না? এবং, বাশ কোথা থেকে $2প্রসারিত হবে? (যেহেতু, আমি জিনিসগুলি শেখার চেষ্টা করছি, আমি কী ঘটছে তা বুঝতে চাই) :)
আদিত্য

ওহ .. এটি পাওয়া গেছে যা একক-কোট এবং ডাবল-কোটের মধ্যে পার্থক্য ব্যাখ্যা করে। এটা পরিষ্কার .. এখন, বাশ কোথা থেকে পেল $2?
আদিত্য

আপনি যদি কমান্ড লাইনে কাজ করছেন তবে $2সাধারণত একটি খালি পরিবেশের পরিবর্তনশীল
ফ্লোরিয়ান ডিয়েচ

ঠিক আছে, জানেন না যে ব্যাশের মধ্যে কোনও ভেরিয়েবল সংজ্ঞায়িত করার প্রয়োজন নেই। যদি বাশ কোনও ভেরিয়েবলটি খুঁজে না পান তবে এটি স্বয়ংক্রিয়ভাবে এটিকে খালি হিসাবে প্রসারিত করে। সার্ভার ফল্টের এই উত্তরটি এটি পরিষ্কার করে।
আদিত্য
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.