Строки внутри арифметического оператора ((...))
рекурсивно раскрываются до тех пор, пока вы не получите целочисленное значение (включая 0 для неопределенного параметра) или строку, вызывающую синтаксическую ошибку.Некоторые примеры:
# x expands to y, and y expands to 3
$ x=y y=3
$ (( x == 3 )) && echo true
true
$ x="foo bar"
$ (( x == 3 ))
bash: ((: foo bar: syntax error in expression (error token is "bar")
# An undefined parameter expands to 0
$ unset x
$ (( x == 0 )) && echo true
true
В вашем случае $C
расширяется до некоторого неопределенного имени параметра, и оно, и Y
расширяются до 0, а 0 == 0.
Длядля сравнения строк используйте [[ ... ]]
.
if [[ $C == Y ]]; then