OK, quindi, sembra che ci sia molta confusione su ciò che lo fa $((...))
.
Fa una valutazione aritmetica dei suoi operandi, bareword sono variabili, non comandi o stringhe (cioè, true
è veramente $true
), e tutto ciò che non è un numero è 0. L'operatore ==
confronta due numeri e restituisce 1 se sono uguali.
È per questo $((true == false))
è 1: non c'è true
o false
variabili di ambiente nell'ambiente, che significa sia $true
e $false
valutare la stringa vuota, quindi 0 nel contesto aritmetica!
Per essere completa, è possibile utilizzare anche la sostituzione di comando nel contesto aritmetica ... Per esempio:
$ echo $((`echo 2`))
2
$ echo $((3 + $(echo 4)))
7
$ a=3
$ echo $((a + $(echo 4)))
7
# undefine a
$ a=
$ echo $((a + $(echo 4)))
4
$ a="Hello world"
$ echo $((a + 1))
1
# undefine a again
$ a=
$ echo $(($(echo $a)))
0
Inoltre, 'echo $ (($ TRUE == $ FALSE))' riferirà '0' come ci si aspetterebbe. 'echo $ (($ TRUE == $ TRUE))' e 'echo $ (($ FALSE == $ FALSE))' riporterà anche '1'. – zostay
Questo è corretto. "true" e "false" come booleani non esistono in bash e quindi non hanno un significato speciale all'interno di '$ (())' – Sorpigal
+1 e -1 a tutte le altre risposte ... ha fatto qualcun altro leggi la domanda? – Random832