ã¯ããã«
POSIX ã«æºæ ããŠããã·ã¹ãã ãªã tr -d '0-9' ã¯æå³ãããšããã«åäœããŸããåäœããªãã®ã¯ãPOSIX æºæ ã¢ãŒãããæå¹ã«ããŠããªãããã§ããUNIX ã®èªèšŒãååŸããŠããã·ã¹ãã ã§ããã°å¿
ã POSIX ã«æºæ ããŠããŸãã
ãããPOSIX æºæ ã¢ãŒãããç¥ããã«ãäºæã¢ãŒããã䜿ã£ãŠãããããã ã§ããç§»æ€æ§ãäœãã·ã§ã«ã¹ã¯ãªããã§ãæ¬æ¥å¿ èŠã®ãªãäºææ§åé¡ã«å¯Ÿå¿ããªããã°ãªããªããªã£ãŠããŸããç¡é§ã«éçºã³ã¹ããäžããããšã«ãªã£ãŠããŸããŸããïŒæ³šæãPOSIX æºæ ã¢ãŒããããäºæã¢ãŒããã¯ç§ã䟿å®äžã«ã€ããååã§ãïŒ
ãã£ãããã³ããŒã UNIX ã®èªèšŒãååŸã㊠POSIX ã«æºæ ããŠããšããã®ã«ãããã䜿çšããåŽã POSIX æºæ ã¢ãŒãã䜿ããã« POSIX 以åã®å€ãã³ãŒããæžããŠãããšããã POSIX ã®æå³ããããŸããã
泚æäºé ïŒåææ¡ä»¶ïŒ
æ¯ååæžããæ³šæäºé ãé·ããŠé¢åãããããŸãããããããæžããŠãªããšåæãšããŠãªãäŸå€çãªã·ã¹ãã ã®è©±ããããã®ã§ç³ãèš³ãããŸããã
ãŸãåæãšããŠç§ã¯ POSIX ã«æºæ ããã·ã¹ãã ãæäœã©ã€ã³ãšããŠèããŠããŸããå€ãæä»£ãPOSIX çå®ä»¥åïŒ1988 幎ããåïŒã«ã¯ POSIX ã«æºæ ããŠãªãã·ã¹ãã ããã£ãããšãç¥ã£ãŠã¯ããŸãããå€ãã·ã¹ãã ã¯ãµããŒããçµäºããŠããã¯ãã§ããã䜿ãããŠãªãïŒäœ¿ãã¹ãã§ã¯ãªãïŒã®ã§èæ ®ããŠããŸãããSolarisãAIXãHP-UX ãªã©çŸåšãµããŒããè¡ãããŠãã POSIX ã«æºæ ããŠããã·ã¹ãã ã®ã¿ã察象ãšããŠããŸãããã¡ãã POSIX ã«å®å šæºæ ããŠããã·ã¹ãã ã ãã§ã¯ãªã POSIX ã«ã»ãŒæºæ ããŠãã Linux ã BSD çããµããŒããçµäºããŠããªãã®ã§ããã°å¯Ÿè±¡ã§ãã
POSIX ã«æºæ ããŠããªãç°å¢ïŒäŸãã° AT&T æ¬å®¶ã® ãªãªãžãã«ã® UNIX System VïŒãŸã§èæ ®ãã¹ãã ãšèšãããŠãã察å¿ãã¹ãç¯å²ãééãªãåºãã£ãŠããŸãã®ã§çŸå®çã§ã¯ãããŸããããŸã POSIX ã«æºæ ããŠããªãã®ã§ããã°ãã©ãåããã¯å®éã«è©²åœã®ç°å¢ã䜿ã以å€ã«ç¥ãããããªãã®ã§ããããæ³å®ããŠæžãã®ã¯äžå¯èœã§ãïŒPOSIX ãç»å Žããã®ã¯ããã以åã®ã·ã¹ãã ã«ç§»æ€æ§ããªãããã§ãïŒããããããã®ç°å¢ãå®éã«äœ¿ãããšããããªãã°ãã®ç°å¢ã«å¿ããåé¿çãçµã¿èŸŒããšããã ãã®ããšã§ãã
POSIX ã«æºæ ããæžãæ¹
ãŸãæåã« POSIX ã«æºæ ããæžãæ¹ã玹ä»ããŠãããŸããèŠããã« [] ã§å²ãå¿
èŠã¯ãããŸããã
$ echo "abc123" | tr 'a-z' 'A-Z'
ABC123
$ echo "abc123" | tr -d '0-9'
abc
泚æ ãã®èšäºã®å 容ã¯ãã±ãŒã«ã«äŸåããã®ã§æ³šæããŠãã ããã
æã¯äž¡æ¹ã®ç°å¢ã§åãæžãæ¹ãããå¿ èŠããã£ã
tr ã³ãã³ãã®ç¯å²æå®ã®æžãæ¹ã¯ 0-9 ã®ããã« [] ã䜿ããªããã®ãš [0-9] ã®ããã« [] ã䜿ããã®ã®äºéãããããŸããPOSIX ã«æºæ ããã·ã¹ãã ã§ã¯ [] ãä»ããå¿
èŠã¯ãããŸãããéå§æåãšçµäºæåã - ã§åºåãã ãã§ãã-d ãªãã·ã§ã³ïŒãã©ã°ãšãèšãïŒã¯æå®ãããæåãåé€ãããšããæå³ã§ãã®ã§ tr -d '0-9' ãå®è¡ãããšæšæºå
¥åã§äžããããæååãã 0 ãã 9 ãŸã§ã®æ°åãåé€ããŸãããã®æžåŒã¯ããšããš BSD çã® tr ã³ãã³ãã§æ¡çšãããŠããæžåŒã§ãããã㊠BSD çã®æžåŒã¯ System V çã® tr ã³ãã³ãã§ã¯åããŸããã
ã
BSD çã®æžåŒã¯ System V çã§äœ¿ããšããšã©ãŒã§èœã¡ãŠããŸããŸãã
ã ããã[]ïŒã«ãã³ïŒã§å²ãå¿
èŠããã£ããã§ããã
# BSD çã®æžåŒã System V çã§äœ¿ããšãšã©ãŒã§èœã¡ã
$ echo "[a012b]" | tr -d '0-9' # [] ã§å²ãå¿
èŠããã
[a12b]
# System V çã®æžåŒã BSD çã§äœ¿ããš [] ãŸã§é€å»ã®å¯Ÿè±¡ãšãªã
$ echo "[a012b]" | tr -d '[0-9]' # [] ã§å²ã£ãŠã¯ãããªã
ab
ãªãã§ïŒãªãã§ïŒãªãã§ïŒèœã¡ãŠãªããããŒãïŒãã®ã³ãã³ãïŒ-d ãã©ã°ãŸã§ã€ã«ã¬ãŠãããããªãã ãããªïŒã»ã»ã»ãŸããã»ã»ã»ããããããïŒ 0-9 㯠0, -, 9 ã®æå³ãªã®ããããïŒãããããïŒãµãŒãŒããŒãŒïœïŒç¥ïŒ
ã
ã¯ããæ¬åœã«ãã¿ãŸããã§ãããããŒãšãèšæ£ã§ãã**äžã®ã³ãŒãã¯å¿ããŠãã ããã**BSD çã®æžåŒ 0-9 ã¯ãSystem V ç³»ã§äœ¿ããšç¯å²æå®ã®æå³ã§ã¯ãªã 0ã-ã9 ãšãã 3 æåãšããŠè§£éããããããããããã®æåãåé€ãããŠããŸããŸãã
# BSD çã®æžåŒã System V çã§äœ¿ããšç¯å²æå®ã«ãªããªããèšæ£ã
$ echo "[a-0123456789b]" | tr -d '0-9' # [] ã§å²ãå¿
èŠããã
[a12345678b]
# System V çã®æžåŒã BSD çã§äœ¿ããš [] ãŸã§é€å»ã®å¯Ÿè±¡ãšãªã
$ echo "[a012b]" | tr -d '[0-9]' # [] ã§å²ã£ãŠã¯ãããªã
ab
# BSD çã§ã System V çã§ãã©ã¡ãã§ã䜿ããæžãæ¹
$ echo "[a012b]" | tr -d '0123456789'
ab
ã·ã§ã«ã¹ã¯ãªããã BSD çãš System V çã®äž¡æ¹ã«å¯Ÿå¿ãããå ŽåããããšæããŸãã
ã ãããã©ã¡ãã§ãåãæžãæ¹ããæã¯ããå¿
èŠããã£ããã§ããã
åããªãã®ã¯ãPOSIX æºæ ã¢ãŒããã«ããŠãªããã
SolarisãAIXãHP-UX ãªã© UNIX ã«èªèšŒãååŸããã·ã¹ãã 㯠POSIX ã«æºæ ããŠãããããSystem V ããŒã¹ã§ãã£ãŠã System V ã®æžãæ¹ãããå¿ èŠã¯ãããŸãããPOSIX (BSD) ã®æžãæ¹ã§åããªããšããããããã¯ãPOSIX æºæ ã¢ãŒããã«ãªã£ãŠããªãããã§ãã
å®ã¯ãã®èšäºã¯ãPOSIX æºæ ã¢ãŒããã®ããšã解説ãããPOSIXæºæ ã¢ãŒãã«å€æŽããŠäºææ§ãäžããæ¹æ³ãã®é¢é£èšäºã§ãããPOSIX æºæ ã¢ãŒãããæå¹ã«ããå
·äœçãªããæ¹ã¯ãã®èšäºãåç
§ããŠãã ããããšèšã£ãŠãé£ãããã®ã§ã¯ãªããåã«ç°å¢å€æ°ãèšå®ããã ãã§ããäŸãã° Solaris ã®å Žåã¯ç°å¢ã®èšå®ãšã㊠PATH="$(getconf PATH):$PATH" ãå®è¡ããŠããã ãã§ãããã ããã³ããŒã«ãã£ãŠããæ¹ã¯ç°ãªãã®ã§æ³šæãå¿
èŠã§ãã
ä»ã«ã POSIX ã«æºæ ããŠãªãã³ãã³ãã¯ããã€ããããŸããSolaris ã§ã¯ /usr/xpg4/bin/ ã /usr/xpg6/bin ã« POSIX ã«æºæ ããã³ãã³ãã眮ãããŠããŸãããããã®ã³ãã³ãããã€ããããã®ã調ã¹ãæ ãautoconf ã®ããã¥ã¡ã³ãããã Solaris 2.0 (1992) ã®é ã«ã¯ãã£ãããšãããããŸãã1992 幎ãšãããš POSIX.2 ïŒã·ã§ã«ãšãŠãŒãã£ãªãã£ïŒã®æšæºåãè¡ããã幎ã§ããããŸããã€ãŸã**ä»ããããã 30 幎åã® POSIX ã§æšæºåããããšããããPOSIX æºæ ã¢ãŒããã¯äœ¿ããããšã«ãªããŸãã**ãããŠè£œåã®ãµããŒãæéïŒSolaris 1.x ã®ãµããŒãçµäºã 2003 幎ïŒãèæ
®ãããšããã 20 幎è¿ãåã«ã¯ System V ã®æ§æã¯äœ¿ããªããŠè¯ããªã£ãŠããã ãããšæãããŸãããã㯠Solaris ã®è©±ã§ããä»ã® åçš Unix ã§ãåæ§ã§ãããã
åçš Unix ã®å€ã㯠POSIX ãæšæºåããã以åãã UNIX ã·ã¹ãã ã販売ããŠå売ãããŠããŸããPOSIX 㯠POSIX ã®ä»æ§ã®ç¯å²ã§äºææ§ãä¿ã£ãŠããã°ååã§ãããããã³ããŒã«ãšã£ãŠã¯ååã§ã¯ãããŸãããããã POSIX ã§æšæºåããããããšèšã£ãŠãå€ãããã®é¡§å®¢ã®ããã«éå»ã®ã·ã¹ãã ãšã®äºææ§ã宿ã«åãæšãŠãããã«ã¯è¡ããŸããããã³ããŒã«ãšã£ãŠã®åªå é äœã¯ãPOSIX 以åãšã®äºææ§ > POSIX æºæ ãã§ããããã§æ¡çšããã®ãããã©ã«ãããäºæã¢ãŒããã«ããŠãããèšå®ã«ãã£ãŠãPOSIX æºæ ã¢ãŒããã«ãããšããæ¹æ³ãªã®ã§ãããäºæã¢ãŒããã¯ãããŸã§ãå€ããœãããŠã§ã¢ãå£ããªãããã«å®è£ ãããŠãããã®ã§ããPOSIX ã«æºæ ããŠããã³ãã³ãã¯æ°ããäœããœãããŠã§ã¢ã䜿ãããã«çšæãããŠããŸãã
System V ãåãæšãŠãŠ BSD ã®åäœãæ¡çšããçç±
ããŠå°ã話ããããŸãããç¥èãšããŠã©ãã㊠POSIX 㯠BSD ã®åäœãæ¡çšããããšãã話ãããããšæããŸãããã®åã«äžã€åéãããŠãã人ãããããªã®ã§è£è¶³ããŠãããš POSIX 㯠Unix ã® OS ãšããŠã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ãããã®ã§ãã Unix ãéçºãã AT&T ãäœã£ãæšæºèŠæ Œã§ã¯ãããŸãããå®ã¯ AT&T 㯠POSIX ãšã¯å¥ã« SVID (System V Interface Definition) ãšåŒã°ãã UNIX ã®æšæºèŠæ Œãå¥ã«äœã£ãŠããŸãïŒåèïŒãããã¯ãã®åã®éã System V ã®ã€ã³ã¿ãŒãã§ãŒã¹ã®å®çŸ©ããããã®ã§ããäžæ¹ POSIX 㯠System V ã ãã§ã¯ãªã BSD ãèŠéã«å ¥ãããå¥ã® OS ãšã®ç§»æ€æ§ã®ããã®æšæºèŠæ Œã§ãããã®ãã System V ãã²ããããŠã¯ããŸãããBSD ã®ä»æ§ã®æ¹ãåªããŠãããšå€æããã° BSD ã®ä»æ§ãæ¡çšããŸãã
æ¬é¡ã«æ»ã£ãŠ POSIX ã System V ãåãæšãŠãŠ BSD ã®åäœãæ¡çšããçç±ã§ããããã㯠POSIX ã® tr ã® RATIONALE ã«æžãããŠããŸãããã å°ãåããã¥ããæ°ãããŸããèŠçŽãããšãäžçªè¢«å®³ãå°ãããããã§ãããŸã tr ã¯ãtranslate charactersãã®ç¥ã§æåéåã倿ãããã®ã§ãããããŸã§ã®èª¬æã§ã¯è©±ãç°¡åãªãã -d ãšãã"ãªãã·ã§ã³"ãã€ããŠèª¬æããŠããŸããããäžè¬è«ãšããŠãªãã·ã§ã³ã¯çç¥å¯èœãªãã®ã§ãããšããããšã§ -d ãã€ããªãå Žåã®è©±ãããŸããïŒäœè«ã§ããäžéšã®ã³ãã³ãã«ã¯ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã«çç¥äžå¯èœãªãå¿
é ãªãã·ã§ã³ããåãããã®ããããŸãããããã¯ãªãã·ã§ã³ã®æå³ã«ç
§ããåããããšççŸããŠããå®ã«ãã³ã»ã³ã¹ãªãã®ã§ããïŒ
tr ã䜿ã£ãŠå°æåã倧æåã«ã倿ãããå Žå以äžã®ããã«æžããŸãã
echo "a123b" | tr 'a-z' 'A-Z' # BSD ã®æžãæ¹ïŒPOSIX æºæ ïŒ
echo "a123b" | tr '[a-z]' '[A-Z]' # System V ã®æžãæ¹
ãã® ïŒ ã€ã®æžãæ¹ããããããã®ç°å¢ã§å®è¡ããçµæãããã§ãã
# Solaris ã®æžãæ¹ïŒ[] å¿
é ïŒã POSIX ã§æ¡çšããŠãããšããã
$ echo "a123b" | tr 'a-z' 'A-Z' # à BSD ã®æžãæ¹ã¯åããªã
$ echo "a123b" | tr '[a-z]' '[A-Z]' # â System V ã®æžãæ¹ã ãåã
# BSD ã®æžãæ¹ïŒ[] ãªãïŒã POSIX ã§æ¡çšããã®ã§
$ echo "a123b" | tr 'a-z' 'A-Z' # â BSD ã®æžãæ¹ã¯åã
$ echo "a123b" | tr '[a-z]' '[A-Z]' # â System V ã®æžãæ¹ãåã
ãã®ããã«ä»®ã« System V çã®æ§æãæ¡çšããŠãããšããã BSD ã§äœ¿ãããŠããã¹ã¯ãªããã¯å£ããŠããŸããŸããäžæ¹ãBSD çã®æ§æãæ¡çšãããããBSD ã§ã System V ãå£ããããšã¯ãããŸããã§ãããBSD çã®æžãæ¹ã¯ [, ] ãããããåãæåã§ãã [, ] ã«å€æãããããç¡å®³ãªã®ã§ãã
-d ã®å Žåã¯åé¡ãããããªããïŒãšããã®ã¯ãã®éããªã®ã§ãã -d ã¯ãããŸã§ãªãã·ã§ã³ã§ãã POSIX æµã«ãæšæºåããªãããšããææ®µã ã£ãŠåããŸãããŸãåé€ã¯ sed ã§ä»£çšããããšãã§ããŸããããã tr ã®æšæºçãªäœ¿ãæ¹ã§ããæåéåã®å€æã¯ sed ã§ã¯ä»£çšã§ããŸããïŒ\U ã \L ã䜿ã£ã倧æåå°æåå€æã¯ GNU æ¡åŒµã§ãïŒãawk ã§ãªã代çšã§ããŸããé·ããªããŸãããPOSIX ã«æºæ ããŠããªãç°å¢ã ãšæå°éã®æ©èœããæããªãæŽå²ç㪠awk ã®å¯èœæ§ãããããå¥ã®æ³šæãå¿
èŠã«ãªã£ãŠããŸããŸããïŒå®éã« Solaris 10/11 ã® /usr/bin/awk ã¯æŽå²ç㪠awk ã§ãããã toupper / tolower 颿°ã䜿ããŸãããïŒ
ãšããããšã§ BSD ã®ä»æ§ãæ¡çšããã®ã¯ãæãããªã¡ãªããããã£ããšããããšã§ããããã POSIX ãèšã£ãŠãããthis convention is used here to avoid breaking large numbers of BSD scriptsãïŒå€ãã®BSD ã¹ã¯ãªãããå£ããªãããã«ïŒãšããèšèã®æå³ãªã®ã§ãããã
äœè«ã§ãã GNU ã® tr ã® man ããŒãžã«ã¯ãã®ããã«æžãããŠããŸãã
tr [OPTION]... SET1 [SET2]
CHAR1-CHAR2
ãããããCHAR1 ãã CHAR2 ãŸã§ãæé ã«å±éããæåå[CHAR1-CHAR2]
ãããããSET1 ãš SET2 ã®äž¡æ¹ã§æå®ããå Žåã«ã¯ CHAR1-CHAR2 ãšåã
äžç¬ [] ã䜿ã£ãæžåŒã«å¯Ÿå¿ããŠããã®ããšæããããSET1 ãš SET2 ã®äž¡æ¹ã§æå®ããå Žåããšããæ¡ä»¶ãä»ããŠããŸããã€ãŸã眮æã®å Žåã¯ç¡å®³ã§ -d ã®å Žåã«ã¯äœ¿ããªãïŒæ£ç¢ºã«ã¯ã©ãåãã®ãæžããŠãªãïŒãšããã ãã®äºã§ãããã®æžãæ¹ã¯ã¡ãã£ãšã²ã©ãã§ããã
ShellCheck ãããã
ã·ã§ã«ã¹ã¯ãªãããæžãæã«ã¯ããããã® ShellCheck ã¯ãã®åé¡ãææããŠãããŸãã
$ cat sample.sh
# !/bin/sh
echo a123b | tr -d '[0-9]'
$ shellcheck sample.sh
In sample.sh line 2:
echo a123b | tr -d '[0-9]'
^-----^ SC2021: Don't use [] around classes in tr,
it replaces literal square brackets.
For more information:
https://www.shellcheck.net/wiki/SC2021 -- Don't use [] around classes in tr...
ãªã³ã¯å
ã®ããŒãžãSC2021 ã§ã¯ãã®èŠåã® Rationale (çè«çæ ¹æ ïŒã瀺ãããŠããããããå€ã System V ã® tr ã®å®è£
ã§å¿
èŠã ã£ããã®ã§ãããPOSIXãGNUãmacOSã BSD ã§ã¯å¿
èŠãªããšããããšãæžãããŠããŸãã
Rationale:
Ancient System V tr required brackets around operands, but modern implementations including > POSIX, GNU, OS X and *BSD instead treat them as literals.Unless you want to operate on literal square brackets, don't include them.
tr ã³ãã³ãã ãã POSIX ã«æºæ ãããæ¹æ³
ãPOSIX æºæ ã¢ãŒããã§ POSIX ã«æºæ ãããããšãåºãããšã¯ããã£ããããã§ã«å€§éã®ãäºæã¢ãŒããçšã®ã·ã§ã«ã¹ã¯ãªãããããããªã¹ã¯ã倧ããããäžæ°ã«å€æŽããããšã¯ã§ããªãããšãããããªå Žåã«ãåèãšã㊠tr ã³ãã³ãã ãã POSIX ã«æºæ ããããã¯ããã¯ã玹ä»ããŸããããæ¹ã¯çްããæ¹éã®éãã§ããã€ãèããããŸãããå€éšã³ãã³ãçãšã·ã§ã«é¢æ°çã® 2 ã€ã玹ä»ããŸãããªã䜿çšããŠããã·ã§ã«ã POSIX ã·ã§ã«ã§ã¯ãªã Bourne ã·ã§ã«ã®å¯èœæ§ãé«ãã®ã§ãããèæ
®ããŠããŸãã
å€éšã³ãã³ãç
äžçªç°¡åãªäŸã§ãããã®æ¹æ³ã䜿ãããšã§ãtr ã³ãã³ãã ãã POSIX ã«æºæ ãããããšãã§ããŸããã²ãšãŸãä»ã®ã³ãã³ãã®å¯Ÿå¿ã¯çœ®ããŠãããŠãtr ã³ãã³ãã ã察å¿ããããšããå Žåã«äœ¿çšããããšãã§ããŸãã
# !/bin/sh
# HP-UX ã®ããã« POSIX æºæ ã¢ãŒãã«ããããã«å¥ã®ç°å¢å€æ°ã
# èšå®ããå¿
èŠãããå Žåã¯ããèšå®ã㊠export ãã
/usr/xpg4/bin/tr ${1+"$@"} # ãã¹ã¯é©åãªãã¹ã«æžãæããããš
# !/bin/sh
echo "[a012b]" | tr -d '0-9'
# PATH ç°å¢å€æ°ãå€ã㊠tr ã³ãã³ããå®è¡ããæã« /opt/bin/tr ãèµ·åããããã«ãã
PATH="/opt/bin:$PATH"
./srcript1.sh
ããåŒã³åºãã¹ã¯ãªããããšã« tr ã POSIX ã«æºæ ããããã©ãããåãæ¿ãããå Žåã¯ãäŸãã°ç°å¢å€æ° POSIX_TR ã®ãããªãã®ãäœã£ãŠèµ·åããã³ãã³ããåãæ¿ããããã«ããŸããïŒãã®ä»ã®ææ®µãšããŠåŒã³åºãå
ã®ã³ãã³ãåã§åãæ¿ããæ¹æ³ãèããããŸããïŒ
Solaris ã®ããã« POSIX ã«æºæ ããã³ãã³ããå¥ã®ãã¹ã«çšæãããŠããå Žå
# !/bin/sh
if [ "$POSIX_TR" ]; then
/usr/xpg4/bin/tr ${1+"$@"}
else
/usr/bin/tr ${1+"$@"}
fi
HP-UX ã®ããã« POSIX æºæ ã¢ãŒãã«ããããã«å¥ã®ç°å¢å€æ°ãèšå®ããå¿ èŠãããå Žå
if [ "$POSIX_TR" ]; then
export UNIX_STD
UNIX_STD=2003
fi
/usr/bin/tr ${1+"$@"}
ããã§ç°å¢å€æ° POSIX_TR ãèšå®ãããŠããå Žåã ã tr ã³ãã³ãã ãã POSIX ã«æºæ ããããã«ãªããŸããã¹ã¯ãªããïŒscript1.shïŒã®äžã§ POSIX_TR ãèšå®ããŠãæ§ããŸããã
PATH="/opt/bin:$PATH"
POSIX_TR=1 ./srcript1.sh
ã·ã§ã«é¢æ°ç
æžããŠããŸã£ãã®ã§äžå¿ç޹ä»ããŸãããä»åã®äŸã§ã¯å€éšã³ãã³ãçã®æ¹ã䟿å©ããã§ãã
tr() {
ãããã(
# HP-UX ã®ããã« POSIX æºæ ã¢ãŒãã«ããããã«å¥ã®ç°å¢å€æ°ã
# èšå®ããå¿
èŠãããå Žåã¯ããèšå®ã㊠export ãã
/usr/xpg4/bin/tr ${1+"$@"}
)
}
# ãããã¹ã getconf ã§ååŸãããå Žåã®äŸ
# POSIX_PATH=`getconf PATH`
# tr() {
# (
# export PATH
# PATH="$POSIX_PATH:$PATH"
# env tr ${1+"$@"}
# )
# }
ããšã¯ãã®ããã« tr ã³ãã³ãã POSIX ã«æºæ ããããã¹ã¯ãªããã®é ã§äžèšã®ã¹ã¯ãªãããèªã¿èŸŒãã ãã§ãã
# !/bin/sh
. ./tr.sh
echo "[a012b]" | tr -d '0-9' # => [ab]
ãã bash ã¹ã¯ãªããã§ããã°ã以äžã®ããã«ç°å¢å€æ° BASH_ENV ã§ã¹ã¯ãªããå®è¡åã«èªã¿èŸŒãã¹ã¯ãªãããæå®ããããšã§ãã¹ã¯ãªãããæžãæããããšãªã tr ã³ãã³ãã ãã POSIX ã«æºæ ãããããšãã§ããŸãã
# !/bin/bash
echo "[a012b]" | tr -d '0-9'
BASH_ENV=./tr.sh ./script2.sh
ãã®ããã«ã·ã§ã«ã¹ã¯ãªããã®ããã°ã©ãã³ã°ãã¯ããã¯ãå©çšããããšã§ãå ã®ã·ã§ã«ã¹ã¯ãªãããå ããªä¿®æ£ããŸãã¯å šãä¿®æ£ããã«ã段éçã« POSIX ã«æºæ ãããŠãããšãããããªããšãã§ããŸããå¿ ã䜿çšãã¹ããã¯ããã¯ãšãããã®ã§ã¯ãããŸããããã¹ã¯ãªããã®ã³ãŒãéãå€ããŠäžåºŠã«ä¿®æ£ããã®ã倧å€ãªå Žåã«äœ¿ãããšãåºæ¥ããã¯ããã¯ã§ãã
ãŸãããã®ãã¯ããã¯ãå¿çšãããš System V çšã®å€ãæ§æã䜿ãããŠããå Žåã«èŠåãåºåãããããããšãå¯èœã«ãªããŸãããããããšå¿çšã®å¹ ãåºããã¯ããã¯ãªã®ã§èŠããŠãããšè¯ããšæããŸãããã ã䜿ãããããšéã«ä¿®æ£ã«æéãããã£ãŠããŸãããšãããã®ã§äœ¿ãæã«ã¯æ³šæãå¿ èŠã§ãã
ãããã« - ã¢ãžã£ã€ã«ãå€åã²æ±æã»ãšã
ãã®è©±ãç§ã屿§ããŠãããã·ã§ã«ã¹ã¯ãªããã®ç¥èãæè¡ã£ãŠå šç¶æŽæ°ãããªãããããšããåé¡ã®äžã€ãªã®ã ãšæããŸãããããã«ãã®è©±ã¯ POSIX ã ãã«è©³ãããŠãç¥ãããšã¯ã§ããŸãããPOSIX ã«ã¯ãPOSIX ã«æºæ ããŠãªãã·ã¹ãã ã POSIX ã«æºæ ãããæ¹æ³ã«ã€ããŠã®ä»æ§ãããªãããã§ãããPOSIX æºæ ã¢ãŒããã«ããæ¹æ³ã¯ãã³ããŒããšã«éãã®ã§ããã³ããŒãçšæããããã¥ã¢ã«ãèªãŸãªããã°ç¥ãããããããŸããã
ãã ãããã®ãããªåé¡ãããã®ã¯ãå€ãããããåçš Unix ãäž»ã§ãããããŠãããã®åçš Unix ã®å€ã㯠UNIX ã®èªèšŒãååŸããŠããŸããUNIX ã®èªèšŒãååŸããŠãããªãã° POSIX ã«æºæ ããŠããããããã¯æºæ ãããæ¹æ³ãããã¯ãã ãšããæšæž¬ãããããšã¯ã§ããŸããPOSIX ã«å ã㊠Unix ãš UNIX ã®èªèšŒã®æå³ãæ£ããçè§£ããããšã§ããã®åé¡ãåé¿ããããšã¯ã§ããã§ãããã
å€ãã®äººã¯ POSIX æºæ 以éã®æ°ããäžä»£ïŒç§ãå«ãâºïŒã§ããããããæ®éã« tr ã³ãã³ãã®äœ¿ãæ¹ã調ã¹ãŠäœ¿ã£ãŠããã°å€ãæžãæ¹ãããããšã¯ãªããšæããŸãããããã·ã§ã«ã¹ã¯ãªããé¢ä¿ã¯æè¡æžã¯å€ããã®ã°ããã ã£ããããããäžã®èšäºãå€ããã®ãå€ãã®ã§ããããåèã«ããŠãããšééã£ãŠåŠãã§ããŸãå¯èœæ§ããããŸããäŸãã° 2000 幎ïŒåæžã¯ 1993 幎ïŒã«åºçããããªã©ã€ãªãŒã®ãå
¥é Korn ã·ã§ã«ãã§ã¯ P133 ã§å€§æåããå°æåãžã®å€æã§ tr [A-Z] [a-z] ã䜿çšããŠããŸããKorn ã·ã§ã«ã¯äž»ã«åçš Unix ã®äžçã§äœ¿ãããŠããã·ã§ã«ã§ããã§ãã®ã§åçš Unix ã䜿ããšãã«ããã®æ¬ã§ Korn ã·ã§ã«ãå匷ããŠããŸããšééã£ãŠèŠããŠããŸãå¯èœæ§ããããŸããããããã以å€ã« Korn ã·ã§ã«ãå°éã«æ±ã£ãæ¥æ¬èªã®æ¬ã¯ãããŸããã
ãŸããå®éã®éçºçŸå Žã§å®è·µçµéšè±å¯ãªäžåžãå 茩ãããå£äŒã§ã®ã¿ãæè¡ãäŒãã£ãŠããå Žåãæ°ããç¥èã«æŽæ°ãããªãåå ãšãªããŸãã宿Šçµéšãé·ããšèšãã°èããã¯ããã§ãããåãããšãäœå¹Žç¹°ãè¿ããŠãç¥èãèªåçã«æŽæ°ãããããšã¯ãããŸãããæè¡åãããã£ãããããŸãããã·ã§ã«ã¹ã¯ãªããã§ãäœå¹ŽãçµãŠã°ãã®åžžèã¯å€ãã£ãŠãããŸãããä»ãŸã§ãã®ããæ¹ã§ãã£ãŠããããããã®ããæ¹ãäžçªæ£ãããã¯éçšããªãã®ã§ãã
æ°ããã·ã¹ãã ãå°å ¥ããŠããããã§äœ¿ããœãããŠã§ã¢ã®æè¡ãå€ããã°ãå€ãã·ã¹ãã ãå°å ¥ããã®ãšãªã«ãå€ãããŸãããæ°ããã·ã¹ãã ã¯åªããŠããïŒäŸãã° POSIX ã«æºæ ããŠããïŒã¯ããªã®ã«ãå šããããæŽ»ãããŠããªãããšã«ãªããŸããæ°ãããã®ãå°å ¥ãããããã«ãã£ãŠäœãæ¹åãããããå ¬åŒã®ããã¥ã¢ã«ãèªãã§çè§£ãããããåãå ¥ããŠã·ã¹ãã éçºå šäœã®å¹çåã»çç£æ§ã®åäžãè¡ãå¿ èŠããããŸãã
ããããã¶ãå€ãèšèã«ãªã£ãæ°ãããŸãããã€ãŸãã¢ãžã£ã€ã«éçºã§èšãããŠãããå€åã²æ±æã»ãšãïŒå€åãå«ãã®ã§ã¯ãªã å€åãèµ·ããããšãèªç¶ãªããšãšããŠåãå ¥ããããšããåºæ¬å§¿å¢ïŒãå®è·µããããšããããšã§ãã
ã¢ãžã£ã€ã«ãœãããŠã§ã¢ã®12ã®åå
ãœãããŠã§ã¢éçºã«ã¯çŽ æ©ãå€åãæ±ããããŸãã
ã·ã§ã«ã¹ã¯ãªããã ã£ãŠå€åãæ±ããããŸãã
ã ãããã¿ããªã¢ãžã£ã€ã«ãå®è·µããããã§ããã