আমি কীভাবে 'তারিখ' আউটপুট থেকে নেতৃস্থানীয় শূন্যগুলি সরিয়ে ফেলব বা এই জাতীয় দশমিক সংখ্যার অষ্টক ব্যাখ্যাটি এড়াব?


37

আমার আছে এটা:

date +"%H hours and %M minutes"

আমি উত্সবটি এটি বলার জন্য ব্যবহার করি .. তবে এটি বলে: "শূন্য নয় ঘন্টা" .. আমি এটি "নয় ঘন্টা" বলতে চাই!

তবে তারিখ সবসময় আমাকে 09 দেয় ... তাই আমি ভাবছি যদি বাশ খুব সহজেই কেবল 9 হয়ে যায়?

জটিল স্ক্রিপ্টে আমি চেষ্টা করেছি

printf %d 09

তবে এটি ব্যর্থ .. অষ্টাল নয় :(

কোন ধারণা?


ও, আপনার গৃহীত উত্তর দুর্দান্ত - আপনার নির্দিষ্ট ক্ষেত্রে, তবে এটি প্রশ্নের শিরোনামের সাথে মেলে না।
einpoklum -

@ ইলক্কাচু এই প্রশ্নটি খুঁজে পেতে আমার মধ্যে পুরানো শিরোনাম মূল বিষয় ছিল, অষ্টাল-বিন্যাসের সংখ্যার দশমিক ব্যাখ্যা জোর করে অনুসন্ধান করার জন্য।
মুড়ু

@ মুরু, হ্যাঁ, আমি ভেবেছিলাম আমি যদি সেখানে অষ্টাল সম্পর্কে নোটটি আটকে রাখতে পারি, তবে একটি সুন্দর বাক্য বানানো না এসেছি। আপনি অবশ্যই এটি পরিবর্তন করতে পারেন, কমপক্ষে আপনি জানেন আপনি কী অনুসন্ধান করেছেন? উত্তর এবং প্রশ্ন এখনও প্রধানত শূন্যটি অপসারণ সম্পর্কে বলে মনে হচ্ছে।
ইলকচাচু

উত্তর:


49
  • আপনার ক্ষেত্রে, আপনি তারিখের ফর্ম্যাট স্ট্রিংয়ের -পরে সংযোজন দ্বারা শূন্য প্যাডিং কেবলমাত্র অক্ষম করতে পারেন %:%-H

    ডিফল্টরূপে, জিরো সহ তারিখের প্যাড সংখ্যাযুক্ত ক্ষেত্রগুলি। নিম্নলিখিত alচ্ছিক পতাকাগুলি '%' অনুসরণ করতে পারে:

    • - (হাইফেন) ফিল্ডটি প্যাড করবেন না
    • _ (আন্ডারস্কোর) স্পেস সহ প্যাড
    • 0 (শূন্য) প্যাড জিরোস সহ
    • ^ সম্ভব হলে উপরের কেসটি ব্যবহার করুন
    • # সম্ভব হলে বিপরীত কেস ব্যবহার করুন

    তারিখের ম্যানুয়াল দেখুন

  • আপনি যদি বিভিন্ন বেসে সংখ্যার ব্যাশ করতে চান তবে

    • শীর্ষস্থানীয় 0 সহ ধ্রুবকগুলি অষ্টাল সংখ্যা হিসাবে ব্যাখ্যা করা হয়।
    • একটি শীর্ষস্থানীয় 0x বা 0 এক্স হেক্সাডেসিমালকে বোঝায়।
    • অন্যথায়, সংখ্যাগুলি [বেস #] এন রূপ ধারণ করে, যেখানে বেসটি পাটিগণিত বেসকে উপস্থাপন করে 2 এবং 64 এর মধ্যে দশমিক সংখ্যা, এবং n সেই বেসের একটি সংখ্যা

    সুতরাং, দশমিক হিসাবে একটি সংখ্যা ব্যাখ্যা করতে, 10#nফর্ম ব্যবহার করুন , যেমন।10#09

    echo $((10#09*2))
    18
    

    বাশ ম্যানুয়ালটির গাণিতিক মূল্যায়ন বিভাগটি দেখুন ।


2
থেক্স, খুব বিস্তারিত! বিটিডব্লিউ, echo $((011)) $((10#011))এর আরও ভাল উদাহরণ যা আউটপুট দেয়9 11
কুম্ভ বিদ্যুৎ

1
এটি নেতিবাচক সংখ্যার জন্য কাজ করে না: lat=048 ; latd=${lat#0} ; echo $((latd-1))কাজ lat=-048 ; latd=${lat#0} ; echo $((latd-1))করে তবে তা করে না।
লুইস এ। ফ্লোরিট

plus=$((10#01))
ডাঃ বেকো

2

আপনি যদি তারিখের মানগুলির সাথে দশমিক তুলনা করার চেষ্টা করছেন, আমি এই পদ্ধতিটি খুব কার্যকর বলে খুঁজে পেয়েছি:

let mymin=$(date '+1%M') ; let mymin=$mymin%100

এটি সর্বদা দশমিক মান দেয়। সুতরাং আমি এটি করতে পারি:

if [[ $mymin -le 1 ]]; then   # only 0 and 1 are true.

এইভাবে 08 বা 09 নিয়ে কোনও সমস্যা নেই। % 100 এর পরিবর্তে% 10 ব্যবহার করা আপনাকে 0 থেকে 9 এর মধ্যে দশ-মিনিটের ব্যাপ্তি দেয় I

echo "$((10#$(date +%M)))"

2

বহনযোগ্যভাবে, আপনি সহজেই 0কোনও ভেরিয়েবল থেকে একটি শীর্ষস্থানীয় মুছে ফেলতে পারেন । নেতৃত্ব না থাকলে এটি পরিবর্তনশীল অপরিবর্তিত রাখে 0

eval $(date +"h=%H m=%M")
h=${h#0}
m=${m#0}
say "$h hours and $m minutes"

ব্যাশ, ksh বা zsh এ, আপনি নেতৃস্থানীয় যে কোনও সংখ্যক অপসারণ করতে ksh এর অতিরিক্ত গ্লোব নিদর্শন ব্যবহার করতে পারেন 0। ব্যাশে shopt -s extglobপ্রথমে চালান । Zsh এ, setopt kshglobপ্রথমে চালান ।

eval $(date +"h=%H m=%M")
h=${h#+(0)}
m=${m#+(0)}
say "$h hours and $m minutes"

1

ব্যাশে সাধারণভাবে:

test ${#number} -eq 2 && number=${number#0}

ফলস্বরূপ

date +"%H %M" | 
{ read hours minutes
hours=${hours#0}
minutes=${minutes#0}
echo "${hours} hours and ${minutes} minutes"; }

বা, পৃথক:

date +"%H hours and %M minutes" | sed -n -e 's/0\([0-9]\)/\1/g' -e p

আমি অবাক হয়েছি যে তারিখটির উপযুক্ত বিন্যাসের বিকল্প নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.