D1341.locale-and-casematch.sh (693B)
1 #!/bin/bash 2 3 LANG=en_US.utf8 4 5 6 # Bash-4.4 以下で失敗する。 7 function check.1 { [[ A == [a-z] ]] && echo "NG ($1)"; } 8 check.1 check.1 9 10 # Bash-4.1 以下で失敗する 11 function check.2 { LC_ALL= LC_COLLATE=C check.1 "$1" 2>/dev/null; } 12 check.2 check.2 13 14 # これならば OK。 15 function check.3 { 16 local LC_ALL= LC_COLLATE=C 17 check.1 "$1" 18 } 2>/dev/null 19 check.3 check.3 20 21 # つまり、LC_ALL= LC_COLLATE=C command の形式を用いると 22 # Bash 4.1 以下では効果がないという事を意味する。 23 # 既存の同形式は全て置き換える必要がある。 24 25 function check.4 { 26 local LC_ALL= LC_COLLATE=C 27 [[ A == [a-z] ]] && echo "NG ($1)" 28 } 2>/dev/null 29 check.4 check.4