ভেরিয়েবল গণনা করুন এবং এটি অন্য ভেরিয়েবলের আউটপুট করুন


10

আমার জানা একমাত্র ক্যালকুলেটর bc। আমি 1একটি ভেরিয়েবল যুক্ত করতে চাই এবং অন্য ভেরিয়েবলের আউটপুট চাই।

আমি nextnumএকটি ফাইলের স্ট্রিং গণনা থেকে পরিবর্তনশীল পেয়েছি :

nextnum=`grep -o stringtocount file.tpl.php | wc -w`

আসুন nextnumমান বলতে 1। এর সাথে যুক্ত হলে 1এটি হয়ে যাবে 2। গণনা করতে, আমি চালাচ্ছি:

rownum=`$nextnum+1 | bc`

তবে ত্রুটি পেয়েছে:

1+1: command not found

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


1
একটি সময়ে কটাক্ষপাত আছে unix.stackexchange.com/questions/40786/...
উলরিখ Dangel

উত্তর:


21

প্রয়োজনীয় অভ্যন্তরের সাবস্ট্রিংটি ` `অবশ্যই একটি বৈধ কমান্ড হতে হবে:

rownum=`echo $nextnum+1 | bc`

তবে এর $( )পরিবর্তে ব্যবহার করা ভাল ` `:

rownum=$(echo $nextnum+1 | bc)

তবে এর প্রয়োজন নেই bc, শেল পূর্ণসংখ্যার গাণিতিক করতে সক্ষম :

rownum=$((nextnum+1))

বা এমনকি আরও সহজ bashএবং ksh:

((rownum=nextnum+1))

8

আপনি ব্যাশে পাটিগণিতের মধ্যে অন্তর্নির্মিত ব্যবহার করতে পারেন:

rownum=$((nextnum+1))

যা কিছুটা দ্রুত হবে।


2

একেবারে সঠিক এবং প্রস্তাবিত সমাধানগুলি সম্পূর্ণ করুন, কেবলমাত্র বোর্ন-শেল উপলভ্য থাকাকালীন পূর্ববর্তী সময়ে এটি যেভাবে করতে হয়েছিল তা উল্লেখ করার জন্য, এটি এটি পছন্দ করে:

rownum=`expr $nextnum + 1` 

1

আমি ব্যবহার করব (যেমন আগে বলা হয়েছিল) rownum=$((nextnum+1))বা ((rownum=nextnum+1))আপনি যদি একটি মানক কমান্ড পছন্দ করেন তবে আপনি লেট কমান্ডটি ব্যবহার করতে পারেন, পছন্দ করুনlet rownum=$nextnum+1


1
letএকটি "স্ট্যান্ডার্ড কমান্ড" কল করা খুব বিভ্রান্তিকর। $((…))মান (POSIX) বাক্য গঠন যেখানে letএকটি ksh (এবং ব্যাশ, zsh) এক্সটেনশন হয়।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.