D1440.suppress-locale-error.sh (1288B)
1 #!/bin/bash 2 3 { 4 LC_CTYPE=pt_PT.UTF-8 5 } 2>/dev/null 6 7 checkA1() { local LC_ALL= LC_CTYPE=C; builtin read -t 0; } 2>/dev/null 8 checkB1() { local LC_ALL= LC_CTYPE=C; builtin eval 'echo "${#a}"'; } 2>/dev/null 9 10 # x [bash-bug] この方法だと LC_CTYPE が反映されない。 11 checkA2() { LC_ALL= LC_CTYPE=C builtin read -t 0; } 2>/dev/null 12 checkB2() { LC_ALL= LC_CTYPE=C eval 'echo "${#a}"'; } 2>/dev/null 13 14 # checkB3 15 # - この方法だと余分に関数呼び出しが入る 16 # o 然し、unlocal は共通関数なのでその場で定義するのは一つの関数だけで良い。 17 # - 終了ステータスが意味を持つ場合には一旦ステータスを保存しなければならない。 18 checkB3() { 19 local LC_ALL= LC_CTYPE=C 20 echo "${#a}" 21 ble/util/unlocal LC_CTYPE LC_ALL 22 } 2>/dev/null 23 24 # checkB4 25 # - これは動くが、これも余分に関数呼び出しが入る。 26 # - その場で関数を複数定義しなければならない。 27 checkB4.impl() { local LC_ALL= LC_CTYPE=C; echo "${#a}"; } 28 checkB4() { 29 checkB4.impl 2>/dev/null 30 } 31 32 # x bash-4.1 以下で LC_CTYPE が反映されない。 33 checkB5.impl() { echo "${#a}"; } 34 checkB5() { 35 LC_ALL= LC_CTYPE=C checkB5.impl 2>/dev/null 36 } 37 38 a=あいう 39 echo A 40 # checkA1 41 # checkB1 42 #checkA2 43 #checkB3 44 #checkB4 45 checkB5 46 echo Z