উদাহরণস্বরূপ, এটি কাজ করার সময়:
$ প্রতিধ্বনি foo বিন্যাস
এটি করে না:
$ / বিন / শ-সি প্রতিধ্বনি ফু
যদিও এটি করে:
$ / বিন / শ-সি 'প্রতিধ্বনি; প্রতিধ্বনি বার ' foo বিন্যাস বার
কোন ব্যাখ্যা আছে?
উদাহরণস্বরূপ, এটি কাজ করার সময়:
$ প্রতিধ্বনি foo বিন্যাস
এটি করে না:
$ / বিন / শ-সি প্রতিধ্বনি ফু
যদিও এটি করে:
$ / বিন / শ-সি 'প্রতিধ্বনি; প্রতিধ্বনি বার ' foo বিন্যাস বার
কোন ব্যাখ্যা আছে?
উত্তর:
থেকে man sh
-c string If the -c option is present, then commands are read from string.
If there are arguments after the string, they are assigned to the
positional parameters, starting with $0
এর অর্থ আপনার আদেশটি এর মতো হওয়া উচিত:
$ sh -c 'echo "$0"' foo
foo
একইভাবে:
$ sh -c 'echo "$0 $1"' foo bar
foo bar
এটিই প্রথম অংশটি ছিল; আমার ধারণা, দ্বিতীয় কেসটি সহজ এবং ব্যাখ্যাটির দরকার নেই।
sh -c 'echo "$@"' fnord a b c d ...
sh -c 'echo $0' foo
এটি সর্বোত্তম বিকল্প নয়, এটি বিবেচনায় রেখে প্রশ্নকর্তা ইতিমধ্যে জানেন যে এটি /bin/sh -c 'echo foo; echo bar'
কাজ করে, আপনি কেবলমাত্র আদেশটি উদ্ধৃত করে উত্তর দিতে পারেন/bin/sh -c 'echo foo'
$ echo foo
foo
এই echo
আর্গুমেন্ট ফু এবং ফু দিয়ে মুদ্রিত হয় with
$ /bin/sh -c echo foo
এই আর্গুমেন্টের সঙ্গে শেল ডাকে echo
এবং উপলব্ধ foo বিন্যাস আর্গুমেন্ট হিসাবে
$0
। echo
নতুন লাইন আউটপুট এবং আপনি বাতিল foo বিন্যাস । আপনি যদি foo আউটপুট করতে চান তবে যুক্তিটি উদ্ধৃত করুন:
sh -c 'echo foo'
বা প্রদত্ত যুক্তিটি ব্যবহার করুন:
sh -c 'echo $0' foo
এই উদাহরণে
$ /bin/sh -c 'echo foo; echo bar'
foo
bar
echo foo; echo bar
আউটপুট আর্গুমেন্টের সাহায্যে শেলটি ডাকা হয়
foo
bar
এই আদেশে:
echo foo
echo
বাইনারি (বা অন্তর্নির্মিত কমান্ড) এবং foo
এটি প্রথম যুক্তি।
এখানে:
/bin/sh -c echo foo
/bin/sh
বাইনারি, যার প্রথম যুক্তিটি হ'ল -c
, যা নিজেই একটি "কমান্ড স্ট্রিং" প্যারামিটার হিসাবে গ্রহণ করে। এটি echo
উপরের উদাহরণে রয়েছে। তারপরে তৃতীয় যুক্তি রয়েছে: foo
এটি একটি যুক্তি /bin/sh
, পক্ষে নয় echo
। এজন্য আপনার তৃতীয় উদাহরণে:
/bin/sh -c 'echo foo; echo bar'
... দুটোই মুদ্রিত আপনি যুক্তিটি উদ্ধৃত করেছেন। সুতরাং: প্রথম যুক্তিটি হ'ল -c
, এবং এই যুক্তির পরামিতিটি 'echo foo; echo bar'
যা সম্পূর্ণরূপে একটি তর্ক হিসাবে ব্যাখ্যা করা হয়; "কমান্ড স্ট্রিং" হিসাবে।
কাঠামোটি কেবল sh -c word
একটি শব্দ চালায় (শেলের মধ্যে)।
যুক্ত হওয়া শব্দের অর্থ অন্যান্য জিনিস, যেমন আর্গুমেন্ট শূন্য, এক, দুটি, ইত্যাদি .:
sh -c word zero one two three
একটি শব্দের মতো ফাঁকা স্থান রয়েছে এমন কমান্ড রাখতে উদ্ধৃতি দেওয়া দরকার:
sh -c 'echo fnord' zero one two three
সুতরাং, এটি সমস্ত যুক্তি মুদ্রণ করে:
$ sh -c 'echo "args=" "$0" "$@"' zero one two three
args = zero one two three
আপনি যে উদাহরণটি উপস্থাপন করছেন: /bin/sh -c echo foo
প্রথম শব্দটি (বিকল্পগুলির পরে) হ'ল echo
এটিই কার্যকর হয়। এবং কোনও পাঠ্যবিহীন প্রতিধ্বনি কেবল একটি নতুন লাইন মুদ্রণ করবে, অন্য কিছুই নয়:
$ / বিন / শ-সি প্রতিধ্বনি ফু
এজন্য আপনি খালি লাইন পান।
আপনি যদি স্থানটি উদ্ধৃত করেন, আপনি "এক শব্দ" (ফাঁকা স্থান নেই) চালাবেন:
$ / বিন / শ-সি প্রতিধ্বনি \ ফু foo বিন্যাস $ / বিন / এস-সি "ইকো ফু" foo বিন্যাস bin / বিন / এস-সি 'ইকো ফু' foo বিন্যাস
উদ্ধৃতি ব্যবহার করে নির্বাহিত কমান্ডটিকে "শব্দ" হিসাবে রাখুন।
sh -c 'echo $1' echo foo