В моем .bashr c ...
46 function exitstatus()
47 {
48 local a=0
49 local s=$1
50 s=$s+1
51 a=$a+1
52 echo -n ' arg1='$s' a='$a
53 s=$1
54 a=0
55 echo ' arg1='$s' a='$a
56
57 if [[ "$s" = "$a" ]]; then
58 echo "true"
59 else
60 echo "false"
61 fi
62 }
63
64 function myprompt {
65 local ss=\$?
66 unset PS1
67 PS1="exit:\$? var:$ss exitstatus $ss $(exitstatus $ss) \n\t $ "
68 }
69 myprompt
exitstatus всегда оценивается в false
, даже если переменные s
и a
выглядят одинаково:
23:36:55 $ true
exit:0 var:0 exitstatus 0 arg1=0+1 a=0+1 arg1=0 a=0
false
23:36:56 $ false
exit:1 var:1 exitstatus 1 arg1=1+1 a=0+1 arg1=1 a=0
false
Строки 50 и 52 продемонстрировали мне, что s
рассматривается как строка, поэтому я сравниваю ее как строку в строке 57. Сравнение работает, как и ожидалось, если я сравниваю s
с собой или a
для себя, потому что exitstatus всегда оценивается в true
. По какой-то причине exit status $?
в качестве аргумента для exitstatus не обрабатывается должным образом.
Чего мне не хватает?