আমি বুঝতে পারি যে !কমান্ডলাইন ইতিহাসের প্রেক্ষাপটে কমান্ডলাইনে বিশেষ তাত্পর্য রয়েছে তবে এগুলি বাদ দিয়ে চলমান স্ক্রিপ্টে বিস্মরণ চিহ্নটি মাঝে মাঝে বিশ্লেষণ ত্রুটির কারণ হতে পারে।
আমি মনে করি এটির সাথে কিছু করার eventআছে তবে কোনও ইভেন্ট কী বা এটি কী করে তা আমার কোনও ধারণা নেই। তবুও, একই কমান্ড বিভিন্ন পরিস্থিতিতে ভিন্ন আচরণ করতে পারে।
নীচের সর্বশেষ উদাহরণটি একটি ত্রুটির কারণ; কিন্তু কেন, যখন একই কোডটি কমান্ড প্রতিস্থাপনের বাইরে কাজ করেছিল? GNU ব্যাশ ব্যবহার করে 4.1.5
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/!p')"; echo "$var"
# bash: !p': event not found
protectedআরও উপযুক্ত হত। ('একক উদ্ধৃতি' দ্বারা সুরক্ষিত)
var=$(…)(ডাবল কোট নেই) এবং এটি আপনার প্রত্যাশার মতো কাজ করবে (আমার মনে হয়)। এখনও "নিরাপদ" কারণ একটি সহজ নিয়োগ মান অংশ শব্দ বিভাজন সাপেক্ষে বা globbing (যদিও এই যেমন builtins মাধ্যমে (বরাদ্দকরণ এর সত্য নাও হতে পারে নয় export, localইত্যাদি সব শাঁস অধীনে))। দুর্ভাগ্যক্রমে, এটি সাধারণ কার্যভারের বাইরে প্রসারিত হয় না, কারণ ডাবল উক্তি হ'ল শব্দ বিভাজন এবং গ্লোব্বিংয়ের হাত থেকে রক্ষা করার উপায়, অন্য প্রসঙ্গে অন্য প্রকারের প্রসারণের পরেও।