vs _ বনাম! $। পূর্ববর্তী কমান্ড এবং আউটপুট পুনঃনির্দেশের শেষ যুক্তি


28

প্রশ্নটি বিশেষ ভেরিয়েবল সম্পর্কে। ডকুমেন্টেশন বলে:

!!:$

designates পূর্ববর্তী কমান্ডের গত যুক্তি । এটি সংক্ষিপ্ত করা যেতে পারে! $।


( $_, একটি আন্ডারস্কোর) শেল প্রারম্ভের সময়, শেল বা শেল স্ক্রিপ্টটি পরিবেশ বা আর্গুমেন্ট তালিকার পাস হিসাবে চালিত হওয়ার জন্য নিরঙ্কুশপথটি সেট করুন set এরপরে, প্রসারণের পরে পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তিতে প্রসারিত হয়। প্রতিটি কমান্ড কার্যকর করা এবং সেই আদেশে রফতানি করা পরিবেশে রাখার জন্য ব্যবহৃত পুরো পথের নাম সেট করুন।

কিছুটা পার্থক্য অবশ্যই থাকতে পারে যা আমি ধরতে পারি না কারণ:

$ echo "hello" > /tmp/a.txt
$ echo "!$"
echo "/tmp/a.txt"
/tmp/a.txt

$ echo "hello" > /tmp/a.txt
$ echo $_
hello

পার্থক্য কি?


4
! history হ'ল ইতিহাস সম্প্রসারণ, বিশেষ পরিবর্তনশীল নয়, তাই আমি ধরে নেব যে বাশ কোডগুলি তাদের অন্যভাবে পরিচালনা করে।
জেফ শ্যাচলার

2
আমি এই প্রশ্নের একটি নির্দিষ্ট উত্তর আছে না, কিন্তু: ① বোর্ন শেল ভাষা এক, সম্ভবত এখনও ব্যাপকভাবে আজ ব্যবহৃত, অন্তত অভ্যন্তরীণভাবে সামঞ্জস্যপূর্ণ প্রোগ্রামিং ভাষা। সাধারণ নীতিগুলি অনুমান করার চেষ্টা আপনাকে কোথাও পাবেন না। আপনাকে কেবল সমস্ত বিশেষ নিয়ম মুখস্থ করতে হবে। দুঃখিত। Expansion সংজ্ঞা অনুসারে আপনি যে শব্দটি তুলে ধরেছেন তার ঠিক পরে "সম্প্রসারণের পরে" শব্দটি নোট করুন । এটা অত্যন্ত গুরুত্বপূর্ণ। এটা তোলে পার্থক্য আপনি একটি পাজল যে ব্যাখ্যা নাও হতে পারে কিন্তু এটি অন্য কোন উপায়ে একটি গুচ্ছ ব্যাখ্যা নেই এবং একই নয়। $_$_!$
zwol

উত্তর:


32

!$ইতিহাস সম্প্রসারণের একটি শব্দ designator, এটা আগের কমান্ডের শেষ কথা বিস্তৃতি ইতিহাস । IOW, ইতিহাসে পূর্বের প্রবেশের শেষ শব্দ। এই শব্দটি সাধারণত কমান্ডের শেষ যুক্তি, তবে পুনঃনির্দেশের ক্ষেত্রে হয় না। ইন:

echo "hello" > /tmp/a.txt

পুরো কমান্ডটি 'echo "hello" > /tmp/a.txt'ইতিহাসে উপস্থিত হয়েছিল এবং /tmp/a.txtএটি সেই আদেশের শেষ শব্দ।

_এটি একটি শেল প্যারামিটার, এটি পূর্ববর্তী কমান্ডের শেষ যুক্তিতে প্রসারিত হয়। এখানে, পুনঃনির্দেশটি কমান্ডের সাথে যুক্ত আর্গুমেন্টগুলির একটি অংশ নয়, সুতরাং কেবলমাত্র helloআর্গুমেন্টকে দেওয়া হয়েছে echo। এ কারণেই $_প্রসারিত হয়েছে hello

_শেল স্ট্যান্ডার্ড বিশেষ পরামিতিগুলির মধ্যে একটিও নয়। এটা কাজ করে bash, zsh, mkshএবং dashশুধুমাত্র যখন ইন্টারেক্টিভ, ksh93শুধুমাত্র যখন দুটি কমান্ড পৃথক লাইন হল:

$ echo 1 && echo $_
1
/usr/bin/ksh

$ echo 1
1
$ echo $_
1

1
এক প্রভাব !$বিস্তার বনাম $_পরামিতি যে echo $_সবসময় হিসেবে ইতিহাসে শো echo $_, যখন echo !$শো মান এটি খোঁজা হয়েছে। যেমন echo one twoতারপর echo !$, তারপর শো আপ টিপে echo two
জ্যাকটোজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.