কেন একটি = 0; একটি ++ প্রস্থান প্রস্থান কোড 1 করতে দিন?


16

এটি চেষ্টা করুন:

$ a=0
$ let a++
$ echo $?
1 # Did the world just go mad?
$ echo $a
1 # Yes, it did.
$ let a++
$ echo $?
0 # We have normality.
$ echo $a
2

এর সাথে বিপরীতে:

$ b=0
$ let b+=1
$ echo $?
0

এবং এটি ( সিরেক্স থেকে ):

$ c=0
$ let ++c
$ echo $?
0

এখানে কি হচ্ছে?

$ bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)

উত্তর:


19

থেকে help let:

Exit Status:
If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise..

যেহেতু var++হয় পোস্টে -increment, আমি গত যুক্তি অনুমান করে শুন্যতে নির্ণয় করা। সূক্ষ্ম ...

সম্ভবত একটি পরিষ্কার চিত্র:

$ let x=-1 ; echo x=$x \$?=$?
x=-1 $?=0
$ let x=0 ; echo x=$x \$?=$?
x=0 $?=1
$ let x=1 ; echo x=$x \$?=$?
x=1 $?=0
$ let x=2 ; echo x=$x \$?=$?
x=2 $?=0

1
ভাল জায়গা আমি অনুমান করছি ++ এর পরে + = 1 এর মতোই কাজ হবে
সাইরেক্স

হ্যাঁ, এটি কাজ করে।
l0b0

1
রেকর্ডের জন্য, এই আচরণটি আমার ksh88 উদাহরণে একই (যদিও পোস্ট-ইনক্রিমেন্ট let a++কাজ করে না)
রাহমু

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