Bash Bracket
bracket() {
local _s=$1
local -a _stack=()
local _i _c
for ((_i = 0; _i < ${#_s}; _i++)); do
_c=${_s:_i:1}
case "$_c" in
')')
if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "(" ]]; then
echo 0; return
fi
unset '_stack[-1]'
;;
']')
if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "[" ]]; then
echo 0; return
fi
unset '_stack[-1]'
;;
'}')
if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "{" ]]; then
echo 0; return
fi
unset '_stack[-1]'
;;
*)
_stack+=("$_c")
;;
esac
done
if (( ${#_stack[@]} == 0 )); then echo 1; else echo 0; fi
}
This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.