On 12/25/19 5:41 PM, Xin Wu wrote: > Hi, > > I found the single-bracket [ ... ] and double-bracket [[ ... ]] behave > differently for string comparison in the follow simple Bash-script. > > # comma (,) is before two (2) in ASCII > a=,rst > b=2rst > if [ "$a" \> "$b" ]; then > echo "single-bracket" > fi > if [[ "$a" > "$b" ]]; then > echo "double-bracket" > fi > > According to some web pages I was expecting that single-bracket and > double-bracket should give same result. I'm not a Bash-expert, therefore > I'm not sure whether this is a real bug in Bash 5.0. > > Merry Christmas! > > Xin > > PS: the web pages are: > > * http://tldp.org/LDP/abs/html/comparison-ops.html > * http://tldp.org/LDP/abs/html/refcards.html > * http://mywiki.wooledge.org/BashFAQ/031
On the last of these three web pages is the note: "As of bash 4.1, string comparisons using < or > respect the current locale when done in [[, but not in [ or test. In fact, [ and test have never used locale collating order even though past man pages said they did. Bash versions prior to 4.1 do not use locale collating order for [[ either." Try using the C locale, for example: LC_COLLATE=C Then see what the double brackets does. -- Eli Schwartz Arch Linux Bug Wrangler and Trusted User
signature.asc
Description: OpenPGP digital signature