টি এল; ডিআর: ক্ষেত্রে export FOO=bar, ব্যাশ তার অস্থায়ী পরিবেশ সৃষ্টি, সেট ডাকে FOO=barযে পরিবেশে, তারপর একটি চূড়ান্ত কমান্ড উৎপাদ export FOO। এই সময়ে, FOOশেষ যুক্তি হিসাবে নেওয়া হয়।
আহ, বহু-আপত্তিজনক $_:
($ _, একটি আন্ডারস্কোর) shell শেল প্রারম্ভকালে, পরিবেশ বা যুক্তি তালিকায় পাস করার সাথে সাথে শেল বা শেল স্ক্রিপ্টটি কার্যকর করার জন্য নিরঙ্কুশ প্যাথনামে সেট করা থাকে। এরপরে, প্রসারণের পরে পূর্ববর্তী কমান্ডের সর্বশেষ যুক্তিতে প্রসারিত হয়। প্রতিটি কমান্ড কার্যকর করা এবং সেই আদেশে রফতানি করা পরিবেশে রাখার জন্য ব্যবহৃত পুরো পথের নাম সেট করুন। মেল চেক করার সময়, এই পরামিতিটি মেল ফাইলটির নাম ধারণ করে।
আসুন কয়েকটি প্রকারভেদ দেখুন:
$ man; echo $_
What manual page do you want?
man
$ man foo; echo $_
No manual entry for foo
foo
$ echo; echo $_
echo
$ echo bar foo; echo $_
bar foo
foo
$ foo=x eval 'echo $foo'; echo $_
x
echo $foo
$ bar() { man $1; }; echo $_
foo
$ for (( i=0; $i<0; i=i+1 )); do echo $i; done; echo $_
foo
$ bar; echo $_
What manual page do you want?
man
$ bar foo; echo $_
No manual entry for foo
foo
$ MANPATH=/tmp; echo $_
$ export MANPATH=/tmp; echo $_
MANPATH
সুতরাং আমরা এখানে তিনটি নিদর্শন দেখতে পাচ্ছি:
- ফাইল সিস্টেম, ফাংশন এবং বিল্ট-ইনগুলি থেকে প্রত্যাশিত
$_কমান্ডগুলি সাধারণত প্রত্যাশিতভাবে আচরণ করে: আর্গুমেন্ট না থাকলে কমান্ডের নামেই নিজেই সেট করা হয়, অন্যথায় উপস্থাপিত আর্গুমেন্টগুলির শেষটি।
- ফাংশন সংজ্ঞা, লুপ এবং অন্যান্য যৌক্তিক নির্মাণের পরে:
$_সংশোধিত হয় না।
- অন্য সব কিছু:
$_এমন কিছুতে সেট করা হয় যা প্রত্যাশিত নয়; অদ্ভুত।
আমি অদ্ভুততার কিছুটা অন্তর্দৃষ্টি দেওয়ার জন্য কোডটি চালিত করেছি।
$ ./bash --noprofile --norc -c 'man foo'
lastword=[man]
lastarg=[foo]
$ ./bash --noprofile --norc -c 'export FOO=bar'
lastword=[export]
lastarg=[FOO=bar]
bind_variable, name=[FOO], value=[bar]
before bind_lastarg, lastarg=[FOO]
bind_lastarg, arg=[FOO]
bind_variable, name=[_], value=[FOO]
$ ./bash --noprofile --norc -c 'declare FOO=bar'
lastword=[declare]
lastarg=[FOO=bar]
bind_variable, name=[FOO], value=[(null)]
before bind_lastarg, lastarg=[FOO=bar]
bind_lastarg, arg=[FOO=bar]
bind_variable, name=[_], value=[FOO=bar]
আপনি যে পার্সার দেখতে পারেনlastarg= সব ক্ষেত্রেই প্রত্যাশিত শেষ যুক্তি ( ) দেখতে পাবে , কিন্তু তারপরে যা ঘটে তা নির্ভর করে যা বাশ ভাবেন তার উপর নির্ভর করে। দেখুন , execute_cmd.c execute_simple_command () ।
এর ক্ষেত্রে export FOO=bar, বাশ অ্যাসাইনমেন্ট দেয় এবং তারপরে পরিবর্তনশীল রফতানি করে। এটি ডকুমেন্টেশনের দৃser়তার সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে যা বিস্তারের পরে শেষ যুক্তি গণনা করেছে।
EDITORরফতানি করার জন্য একটি যুক্তি