মানে কি!


32

আমি একটি টিউটোরিয়াল অনুসরণ করছি এবং এটি এই আদেশটি চালানোর উল্লেখ করেছে:

sudo chmod 700 !$

আমি এর সাথে পরিচিত নই !$। এর মানে কী?


5
echoআপনি যদি নিশ্চিত হন না যে এটি কী করবে তা সাধারণত চেষ্টা করার চেষ্টা করা নিরাপদ ।
শাদুর

8
@ শাদুর, সবসময় না। echo $(rm -rf /)
সিজেএম

1
@ সিজেএম আপনি সত্যিকারের পুরানো সিস্টেমে --no-preserve-rootনা থাকলে আপনার সেখানে বিকল্পের প্রয়োজন হবে এবং আপনি যদি কোনও প্রোগ্রামে "সংরক্ষণ করবেন না" শব্দটি দেখতে পান তবে এটি কী করে তা সম্পর্কে ভাল করে সাবধানে ভাবেন।
wchargin

4
@ ডাব্লুচারগিন খুব সতর্কতার সাথে ধরে ধরে নিন যে "সত্যই পুরানো" এবং "লিনাক্স নয় / জিএনইউ কোর্টিল ব্যবহার করছে না" একই জিনিস; তারা না।
ক্রিস ডাউন

উত্তর:


44

মূলত, এটি পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তি।

!$পূর্ববর্তী কমান্ডের "শেষ"। নিম্নলিখিত উদাহরণটি বিবেচনা করুন: আমরা কোনও ফাইলে একটি শব্দ খুঁজতে শুরু করি:

grep -i joe /some/long/directory/structure/user-lists/list-15

জো যদি সেই ব্যবহারকারী তালিকায় থাকে তবে আমরা তাকে এটি থেকে সরাতে চাই। হয় হয় দীর্ঘক্ষণ ডিরেক্টরি গাছের সাথে আমরা যুক্তি হিসাবে আগুন জ্বালাতে পারি, বা vi !$কোন ব্যাশটি প্রসারিত হয় ঠিক তেমন :

vi /some/long/directory/structure/user-lists/list-15

( উত্স ; উপায় গাইড,)


এই !$টোকেন এবং বিশেষ শেল ভেরিয়েবলের মধ্যে পার্থক্য মূল্যহীন $_। আসলে, উভয়ই পূর্ববর্তী কমান্ডের শেষ যুক্তিতে প্রসারিত হয়। যাইহোক, !$সময় প্রসারিত হয় ইতিহাস সম্প্রসারণ , যখন $_সময় প্রসারিত হয় প্যারামিটার সম্প্রসারণ । এর একটা গুরুত্বপূর্ণ ফল যে, যখন আপনি ব্যবহার করেন !$, প্রসারিত কমান্ড আপনার ইতিহাসে সংরক্ষিত হয়।

উদাহরণস্বরূপ, কীস্ট্রোকগুলি বিবেচনা করুন

  • echo Foo Enter echo !$ Jar Enter Up Enter; এবং

  • echo Foo Enter echo $_ Jar Enter Up Enter

(পরিবর্তিত কেবলমাত্র অক্ষরগুলি হ'ল $!এবং $_মাঝখানে))

পূর্ববর্তী সময়ে, আপনি টিপলে Up, কমান্ড লাইনটি পড়ে echo Foo Jar, সুতরাং stdout এ লেখা শেষ লাইনটি Foo Jar

পরবর্তীকালে, আপনি টিপলে Up, কমান্ড লাইনটি পড়ে echo $_ bar, তবে এখন $_আগের তুলনায় তার আলাদা মান রয়েছে — প্রকৃতপক্ষে, $_এখন Jar, তাই স্টাডআউটে লেখা শেষ লাইনটি Jar Jar

আরেকটি পরিণতি হ'ল _অন্যান্য প্যারামিটার বিস্তৃতিতে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, কমান্ডের ক্রম

printf '%s '    isomorphism
printf '%s\n'   ${_%morphism}sceles

কপি করে প্রিন্ট isomorphism isosceles। তবে কোনও অনুমান " ${!$%morphism}" প্রসার নেই।

বাশ-এ সম্প্রসারণের পর্যায়গুলি সম্পর্কে আরও তথ্যের জন্য EXPANSIONবিভাগটি দেখুন man 1 bash( এটি অনলাইন সংস্করণে শেল প্রসারণ বলা হয় )। HISTORY EXPANSIONঅধ্যায় পৃথক হয়।


6
খুশী হলাম। জানা ভাল. এছাড়াও, ভাল জিনিস স্ট্যাক এক্সচেঞ্জ আছে। গুগল এর মতো !$
অ্যান্ড্রু

4
বিটিডাব্লু, কমান্ড লাইনে, আপনি পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তিটি insert-last-argumentসাধারণত সীমাবদ্ধ করে সন্নিবেশ করতে পারেন M-.
চোরোবা

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

1
অ্যান্ড্রু এফওয়াইআই, আমি গুগলকে "ব্যাশ ব্যাং ডলার" অনুসন্ধান করেছি এবং তৃতীয় তালিকা হিসাবে এই লিঙ্কটি সহ ভাল ফলাফল পেয়েছি।
wchargin

1
@ স্টারডন আমি গতরাতে উত্তরটি গ্রহণ করার চেষ্টা করেছি, কিন্তু এটি এত দ্রুত ছিল যে আমি তা গ্রহণ করার জন্য অপেক্ষা করতে বাধ্য হয়েছিলাম।
অ্যান্ড্রু

4

কঠোরভাবে বলতে গেলে !$ইতিহাসের তালিকা থেকে শেষ কমান্ডের শেষ শব্দ।

শব্দ - শেল দ্বারা ইউনিট হিসাবে বিবেচিত অক্ষরের একটি ক্রম। শব্দগুলিতে অব্যক্ত মেটাচার্যাক্টর অন্তর্ভুক্ত নাও হতে পারে।

মেটাচার্যাক্টর - এমন একটি চরিত্র যা শব্দের আলাদা করে ফেলেছে। একটি মেটাচার্টর হ'ল ফাঁকা বা নিম্নলিখিত বর্ণগুলির একটি: '|', '&', ';', '(', ')', '<', বা '>'

ফাঁকা - একটি স্থান বা ট্যাব অক্ষর।

উদাহরণ:

set -o history # enable command history
set -o histexpand # enable ! style history substitution

HISTSIZE=10

# save all lines on the history list    
HISTCONTROL=
HISTIGNORE=

date
echo !$ # prints date

date>/dev/null
echo !$ # prints /dev/null

echo a b c>/dev/null
echo !$ # prints /dev/null

HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list
echo a b c
 echo d e f # space at the beginning
echo !$ # prints c


-3

!$ আপনাকে সেই নির্দিষ্ট ব্যবহারকারীর জন্য ব্যবহৃত সর্বশেষ আদেশটি দেবে ...

আপনি কমান্ড ব্যবহার করে পূর্বে ব্যবহৃত কমান্ডগুলির ইতিহাসও খুঁজে পেতে পারেন history... এটি চেষ্টা করে দেখুন ...

দ্রষ্টব্য: কোনও নির্দিষ্ট ব্যবহারকারীর জন্য, পূর্বে ব্যবহৃত সমস্ত কমান্ড বাশ ইতিহাসের ফাইলের আওতায় সংরক্ষণ করা হবে।


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