Просто потому, что мы можем сделать это более сложно:
declare -A a=( [a$var1]= [a$var2]= [a$var3]= )
if [[ "${#a[@]}" == 1 ]]; then echo equal; else echo not equal; fi
unset a
Идея состоит в том, чтобы создать ассоциативный массив a
с парами ключ-значение. Выше значение всегда является пустой строкой, поэтому мы заботимся только о ключах. Клавиши в приведенном выше являются a$var1
, a$var2
и a$var3
. Если какой-либо из этих ключей идентичен, то это как если бы мы определили только один. Т.е.
declare -A a ( [aa]= [ab]= [aa]= )
эквивалентно
declare -A a ( [aa]= [ab]= )
Значение ${#a[@]}
возвращает общее количество записей в массиве. Таким образом, если оно равно единице, это означает, что все значения идентичны.
Мы ставим перед ключами символ (здесь a
), чтобы гарантировать, что переменные могут быть чем угодно, включая пустые строки, @
и *
. Спасибо Ивану за указание на это.