উত্তর:
$(command)
সিনট্যাক্স আউটপুট ফিরে আসবে command
। এখানে আপনি খুব সাধারণ cat
প্রোগ্রামটি ব্যবহার করছেন যার একমাত্র কাজ হ'ল স্ট্যান্ডার্ড আউটপুট (স্টাডআউট) এ স্ট্যান্ডার্ড ইনপুট (স্টাডিন) থেকে সমস্ত কিছু অনুলিপি করা। যেহেতু আপনি দৌড়াচ্ছে awk
উদ্ধৃতি চিহ্ন ভিতরে স্ক্রিপ্ট, $(cat)
শেল দ্বারা প্রসারিত হয় আগেawk
, স্ক্রিপ্ট চালানো হয়, তাই এটি সার্চ echo
তার stdin এবং যথাযথভাবে এটা তার stdout- এ কপি মধ্যে আউটপুট। এটি পরে awk
স্ক্রিপ্টে পাস করা হয় । আপনি এটিকে ক্রিয়াতে দেখতে পাবেন set -x
:
$ set -x
$ echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $(cat) }"
+ echo '((3+(2^3)) * 34^2 / 9)-75.89'
++ cat
+ awk 'BEGIN{ print ((3+(2^3)) * 34^2 / 9)-75.89 }'
1337
সুতরাং, awk
আসলে চলছে BEGIN{ print ((3+(2^3)) * 34^2 / 9)-75.89 }'
যা 1337 ফেরত।
এখন, এটি $*
একটি বিশেষ শেল পরিবর্তনশীল যা শেল স্ক্রিপ্টকে দেওয়া সমস্ত অবস্থানগত পরামিতিগুলিতে প্রসারিত হয় (দেখুন man bash
):
* Expands to the positional parameters, starting from one. When the expan‐
sion is not within double quotes, each positional parameter expands to a
separate word. In contexts where it is performed, those words are sub‐
ject to further word splitting and pathname expansion. When the expan‐
sion occurs within double quotes, it expands to a single word with the
value of each parameter separated by the first character of the IFS spe‐
cial variable. That is, "$*" is equivalent to "$1c$2c...", where c is
the first character of the value of the IFS variable. If IFS is unset,
the parameters are separated by spaces. If IFS is null, the parameters
are joined without intervening separators.
তবে এই পরিবর্তনশীলটি এখানে খালি। সুতরাং, awk
স্ক্রিপ্টটি হয়ে যায়:
$ echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
+ awk 'BEGIN{ print }'
+ echo '((3+(2^3)) * 34^2 / 9)-75.89'
$*
একটি খালি স্ট্রিং বিস্তৃতি, এবং awk
একটি খালি স্ট্রিং প্রিন্ট করতে বলা হয়, এবং এই কারণেই আপনি কোন আউটপুট পেতে।
bc
পরিবর্তে আপনি কেবল ব্যবহার করতে পারেন :
$ echo '((3+(2^3)) * 34^2 / 9)-75.89' | bc
1336.11
scale=
(আমি ধরে নিলাম ওপি লেটস্পেকের সাথে খেলতে চায়) তবে আমি কোনও উপায় খুঁজে পাইনি। আমার সিস্টেমে bc -l
ফিরে আসে 1336.99888888888888888888
।
bc -l
, অন্যথায় আপনি উপরে পোস্ট করেছেন এমন তাত্পর্য পাবেন (যেখানে বিভাগের ফলাফল কেটে দেওয়া হয়েছে)।