sistema_progs

Programas para customizar o meu entorno de traballo nos meus equipos persoais
Log | Files | Refs

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