ã¯ããã«
30幎以äžãã®é·ãé UNIX ãæ¯ããŠãã Bourne ã·ã§ã«ã UNIX ã®ãµããŒãçµäºãšãšãã«æ¶ãå»ãããšããŠããŸããã¿ãªãããä»ã®ã·ã§ã«ãžã®ç§»è¡ã¯ãæžã¿ã§ããããïŒ æ®ãäžå¹ŽããŸã ç§»è¡ãæžãã§ããªããšãã人ã®ããã«ãç§»è¡ã®ããã®ç°¡åãªã¬ã€ãã©ã€ã³ãšåã·ã§ã«ã®ç¹åŸŽããŸãšããŸããã
æ°ã¥ããã2027幎1æã«ãŸã§äŒžã³ãŠããŸãããã€ãŸãæ®ã3幎ã§ã...
ïŒèšäºã®å
å®¹ã¯æ°ãåãããä¿®æ£ããŸãïŒ
New end date of Extended Support for Oracle Solaris 10 and 11.3
(October 25, 2023)
sh ã¯æã¯ Bourne ã·ã§ã«ã®ããšã§ããããããéå»ã®è©±ã§ããä»ã©ããBourne ã·ã§ã«ãã解説ããŠããèšäºã sh ã®ããšã Bourne ã·ã§ã«ãšåŒãã§ããèšäºã¯æ å ±ãå€ãïŒå€§åŠé¢ä¿ã«å€ãïŒããŸãã¯å€ãæ å ±ãå ã«ããŠæžãããããã·ã§ã«ã®ããšãæ£ããçè§£ããŠãªãäžæ£ç¢ºãªèšäºãªã®ã§åèã«ãªããŸãããåãããããåºæºã§ããã
é¢é£èšäº ã·ã§ã«ãšUNIXã³ãã³ãã®æªæ¥ ïœ ããããã®10幎ã§èµ·ããã·ã§ã«ã¹ã¯ãªããã®å€å
æ®ã1幎ãšããã®ã¯ã©ãããããšïŒ
Bourne ã·ã§ã«ã¯ POSIX ã«æºæ ããŠããªãå€ãã·ã§ã«ã§ããæåã® Bourne ã·ã§ã«ã¯ 1979 幎ã«ç»å ŽããæçµããŒãžã§ã³ã¯ 1992 幎ã®ãã®ã§ããã¡ãããšããããŒã¿ãæã£ãŠããããã§ã¯ãããŸããããçŸåš Bourne ã·ã§ã«ã䜿ã£ãŠããæãã·ã§ã¢ãé«ããšæããã UNIX 㯠Solaris 10 ã§ãããã ã Solaris 10 ã§ã¯ 1989 幎çã® Bourne ã·ã§ã«ã䜿ãããŠããŸãããã£ãšãå®å¿ããŠãã ãããSolaris 10 ã§ã /usr/xpg4/bin/sh ã«æ°ããã·ã§ã«ïŒãšèšã£ãŠã ksh88 ãªã®ã§ååå€ãã§ããïŒãããã®ã§ Solaris 10 㯠Bourne ã·ã§ã«ãã䜿ããªããšããæå³ã§ã¯ãããŸãããSolaris 10 ã®ãµããŒãã¯äœåãå»¶é·ãããŠããŸãããããŸãæ¹å®ãããªããªãã°å»¶é·ãµããŒã㯠2025 幎ã®1æã§çµäºããŸããã€ãŸãããš 1 幎㧠Bourne ã·ã§ã«ã /bin/sh ãšããŠäœ¿ãç°å¢ããªããªããšããããšã§ãã
ãªããLinuxãmacOSãBSD ç³» Unixãæ°ããã® System V ç³» Unix ã䜿ã£ãŠããå Žåã¯ããã§ã« Bourne ã·ã§ã«ããã®ç§»è¡ã¯å®äºããŠããŸããç¹ã« LinuxãmacOSãFreeBSDãNetBSDãOpenBSD ã§ã¯éå»ã« Bourne ã·ã§ã«ãæšæºçãªã·ã¹ãã ã§äœ¿ãããããšã¯ãããŸããããããã® OS ã®å©çšè ã¯ãã€ããŒãªãªãŒãã³ãœãŒã¹çã® Bourne ã·ã§ã«ïŒHeirloom Bourne ShellãSchily Bourne ShellïŒãç¬èªã«ãã«ãããŠã€ã³ã¹ããŒã«ããŠããªãéã Bourne ã·ã§ã«ã䜿ã£ãããšã¯ãªãã§ãããã
çŸç¶ã®å確èª
Bourne ã·ã§ã«ã®è©±ãããã«åœãã£ãŠããŸãçŸç¶ã®ã·ã§ã«ã®å€åã®å確èªãããŸãããã
ãBourne ã·ã§ã« vs C ã·ã§ã«ãã®æŠãã¯æŽå²ã®è©±
ãã€ãŠãBourne ã·ã§ã«ãš C ã·ã§ã«ã®æŠãããããŸããã䞻㫠1980 幎代ãã 1990 幎代ã§ããããã 2000 幎代ããããŸã§ã®è©±ã§ããå ãã Unix ã«ãã£ãã·ã§ã«ã¯ Thompson ã·ã§ã«ã§ãããããŠå šãæ°ããã·ã§ã«ãšã㊠Bourne ã·ã§ã«ã®éçºã 1975 幎ã®çµããé ã«å§ãŸã 1976 幎ã®åãé ã«æåã®ããŒãžã§ã³ã宿ããŸããïŒåèïŒããã㊠1979 幎 1 æïŒåèïŒã« Version 7 Unix ãšãšãã«äžã®äžã«åºããªãªãŒã¹ãããŸãããäžæ¹ã§å ã® Unix ããåå²ãã BSD Unix ã§ã¯ Thmopson ã·ã§ã«ãããŒã¹ãšããæ°ããã·ã§ã«ã®éçºãå§ãŸãïŒ1978幎 ã® 1BSD ã«ã¯ C ã·ã§ã«ã¯å«ãŸããïŒã1978 幎é ã« C ã·ã§ã«ãšååãå€ã㊠1979 幎 5 æã® 2BSD ã®äžéšãšããŠãªãªãŒã¹ãããŸããïŒåèïŒãçŸåšã® C ã·ã§ã«ã®ç«ã¡äœçœ®ã¯ãæŽå²çãªæå³ãšã¢ã³ãã£ãŒã¯ã奜ããªäººã䜿ãã·ã§ã«ã§ããC ã·ã§ã«ã¯æè¡çã«ãå£ã£ãŠããæ°ããã·ã§ã«ãåŠã¶äººã䜿ãã·ã§ã«ã§ã¯ãããŸããã
1990 幎é 㯠Unix ããæŽŸçããå€ãã® Unix ãååšããŠããŸããïŒåè A4çšçŽ40æã§1969幎ãã2022幎ãŸã§ã®UNIXã®æŽå²ãUnix HistoryããäžæããŠã¿ã - GIGAZINEïŒãå ã® Unix ããå«ãŸããŠãã Bourne ã·ã§ã«ã¯ãBSD Unix ãå«ãå€ãã® Unix ã«å«ãŸããŠããŸããããC ã·ã§ã«ã¯ BSD Unix ã®æŽŸçããã㯠C ã·ã§ã«ãçµã¿èŸŒãã Unix ã«ããååšããŠããŸããã§ããããã®ãããBourne ã·ã§ã«ã¯ã©ãã«ã§ãããã C ã·ã§ã«ã¯ããã§ã¯ãªãããšèšãããŠããŸããã
- 1990 幎é ã®è©±
- ãBourne ã·ã§ã«ãã¯ã©ã® Unix ã«ãååšããŠãã
- ãC ã·ã§ã«ãã¯äž»ã« BSD Unix ã«ååšãã
ãBourne ã·ã§ã«ã¯ç§»æ€æ§ãé«ãïŒã©ã®ç°å¢ã§ãåãïŒããšããã®ã¯ 1990 幎代ãã 2000 幎代é ãŸã§ã®èãæ¹ã§ããåœæã¯ã©ã® Unix ã«ãååšããŠããããã§ãããŸã C ã·ã§ã«ã¯å¯Ÿè©±æ©èœã«åªããŠãããšããã®ãããã®æä»£ãŸã§ã®èãæ¹ã§ãããããã« Bourne ã·ã§ã«ããã C ã·ã§ã«ã®ã»ãã察話æ©èœã«åªããŠããŸãããC ã·ã§ã«ãããçŸåšã®ã·ã§ã«ã®æ¹ã察話æ©èœã«åªããŠããŸãã
C ã·ã§ã«ã¯ BSD Unix ã§æšæºã·ã§ã«ãšããŠäœ¿ãããŠããŸããããçŸåšã®ã·ã§ã«ã«æ¯ã¹ãŠã¡ãªããããªãããæ¬¡ç¬¬ã«äœ¿ãããªããªã£ãŠãããŸãããFreeBSD ã§ã¯ 13.x ãŸã§ root ãŠãŒã¶ãŒã®ããã©ã«ãã·ã§ã«ã¯ csh ã§ããããFreeBSD 14.x ãã FreeBSD sh ã«å€æŽãããŸãããä»ã® BSD ç³» Unix ã§ã¯ sh ãçšããããŠãããC ã·ã§ã«ã«è§Šãæ©äŒãããã®ã¯ FreeBSD ãæåŸã ã£ããããæèã㊠C ã·ã§ã«ãå©çšããããšèšå®ããªãéããä»åŸ C ã·ã§ã«ã䜿ãããããšã¯ãªãã§ãããã
ã¡ãªã¿ã«ãC ã·ã§ã«ã㯠csh ã®æ£åŒãªçšèªïŒC-ShellïŒã§ããããB ã·ã§ã«ãã¯ã»ãŒã»ãŒæ¥æ¬ç¬èªã®çšèªã§ãããããããC ã·ã§ã«ãã«å¯Ÿã㊠Bourne ã·ã§ã«ã®é æåãããB ã·ã§ã«ããšããæç§°ã§åŒã°ããããã«ãªã£ãã®ã§ãããããã ã Bourne ã·ã§ã«ã«å¯Ÿã㊠bsh ãšããããã°ã©ã åã䜿ãããããšã¯ãããŸãããåæ§ã«ãK ã·ã§ã«ãããA ã·ã§ã«ããæ¥æ¬ïŒã®ç¹å®ã®äŒæ¥ïŒã䜿ãæç§°ã§ãããã ããZ ã·ã§ã«ãïŒZ ShellïŒã¯æ£åŒãªçšèªã§ãã
POSIX æºæ ã·ã§ã«ãžã®ç§»è¡
sh ã·ã§ã«ã®ä»æ§ã¯ 1992 幎㫠POSIX.2-1992 ãšããŠæšæºåãããŸããããã®ã·ã§ã«ã®ä»æ§ã¯äžè¬çã« POSIX ã·ã§ã«ãšåŒã°ããŠããŸããã³ãã³ãå㯠sh ã§ãããPOSIX 㯠sh ã®ããšã Bourne ã·ã§ã«ãšã¯åŒãã§ããŸãããPOSIX ããã¥ã¡ã³ãã® PDF ãæ€çŽ¢ããŸããããBourneãã®æåãåºãŠããã®ã¯ããã 5 ç®æãããããæã®ã·ã§ã«ã®è©±ãããŠããæèã§ç»å ŽããŸããPOSIX ã·ã§ã«ã¯åœæã®æå
端ã®ã·ã§ã«ã§ãã£ã KornShellïŒksh88ïŒã®ä»æ§ãããŒã¹ã«ãªã£ãŠããŸãã
1990幎é ãAT&T ãå§ããåçš Unix ããžãã¹ã®ããã«ã©ã€ã»ã³ã¹çãªå¶éã§ Bourne ã·ã§ã«ã BSD Unix ã§äœ¿ããªããªããŸããããã®ããæ°ãã ashïŒAlmquist ã·ã§ã«ïŒã BSD Unix ã§äœ¿ãããããã«ãªããŸãããash ãå 㯠Bourne ã·ã§ã«ã®ã¯ããŒã³ã§ããã POSIX ã·ã§ã«ã®ä»æ§ã«æºæ ããããã«ä»æ§ã倿ŽãããŠãããŸãããçŸåšã® FreeBSD sh ã NetBSD sh 㯠ash ãããŒã¹ã«ç¬èªã«æ©èœã远å ãããã®ã§ããOpenBSD ã§ã¯ KornShell ã®ãããªãã¯ãã¡ã€ã³å®è£ çã§ãã pdksh ãããŒã¹ã«ç¬èªã«æ©èœã远å ãã OpenBSD sh ã䜿ãããŠããŸãã
åçš Unix ã§ã¯ ksh88 ãã ksh93 ãžã®ç§»è¡ãå§ãŸããŸãããPOSIX ã·ã§ã«ã¯ KornShell ã®ä»æ§ãããŒã¹ã«ãªã£ãŠãããšã¯ããã现ããéãããã£ããã POSIX ã«å®å šã«æºæ ããã·ã§ã«ãç®æããŠéçºããããã®ã ksh93 ã§ãããããŠçãããåç¥ã® bash ã zsh ãå 㯠Bourne ã·ã§ã«ã®ã¯ããŒã³ããå§ãŸããŸããããks93 ã®æ©èœãåã蟌㿠POSIX ã«æºæ ããã·ã§ã«ãžãšããã«å€åããŠãããŸãããBourne ã·ã§ã«ã¯åãæ®ãããŸããããããã Bourne ã·ã§ã«ã䜿ã£ãŠããåçš Unix ã¯ãBourne ã·ã§ã«ã POSIX ã«æºæ ã«ä¿®æ£ããããã KornShell ã䜿çšããã»ããè¯ããšèããããã§ãããã
ã·ã§ã«ã®æŽå²ã«ã€ããŠã¯ãã·ã§ã«ã®æŽå² ç·ãŸãšãïŒçš®é¡ãšç³»çµ±å³ããåç §ããŠãã ããã
ããŸããŸãªã·ã§ã«ã sh ãåä¹ãããã«ãªã£ã
ãã€ãŠ sh 㯠Bourne ã·ã§ã«ã®ååã§ãããå³å¯ã«èšãã° Unix ã®æåã® sh 㯠Thompson ã·ã§ã«ã§ãããæ¹è¯ããã PWB ã·ã§ã«ãäžéšã§ sh ãšããŠäœ¿ãããŠããŸãããBourne ã·ã§ã«ãããåã®ã·ã§ã«ã¯ã·ã§ã«ã¹ã¯ãªããã®æ©èœãå°ãªã倿°ã颿°ãªã©ã®æ©èœã¯ãªããã€ãçšåºŠã®æ©èœããæã£ãŠããŸããã§ãããããã ãã®æ©èœã§ã¯ã·ã§ã«ã¹ã¯ãªãããšããŠäœ¿ããªããšããããšã§äžããäœãçŽãããã·ã§ã«ã Bourne ã·ã§ã«ã§ãã1979 幎ã«ãªãªãŒã¹ããã Bourne ã·ã§ã« 㯠sh ã®ååãä¹ã£åããŸããã
ãã® Bourne ã·ã§ã«ã Solaris 10 ãé€ããŠäœ¿ãããªããªããŸãããå Unix/Linux ã§ã¯ POSIX ã«æºæ ããŠããªã Bourne ã·ã§ã«ã§ã¯ãªããPOSIX ã«æºæ ããããŸããŸãªã·ã§ã«ã /bin/sh ãšããŠäœ¿çšããŠããŸããæŽå²çãªäºææ§äžã®çç±ãããçŸåšã®ã·ã§ã«ã®å€ãïŒbashãksh93u+mãNetBSD shãOpenBSD shïŒã¯ãPOSIX ã«æºæ ããã¢ãŒããåããŠãã sh ãšããã³ãã³ãåã§å®è¡ãããšãïŒãŸã㯠set -o posix ãå®è¡ããæïŒã«ãå®å
šã« POSIX ã«æºæ ããŸãããã ã ãPOSIX ã«æºæ ããããšããèšèã®æå³ã¯æ¡åŒµæ©èœãç¡å¹ã«ãããšããæå³ã§ã¯ãªããPOSIX ã®ä»æ§ãšççŸããåäœã倿Žãããšããæå³ã§ããå POSIX ã·ã§ã«ã¯æ¡åŒµæ©èœã POSIX æºæ ã¢ãŒãã§ãæå¹ã«ããŠãããPOSIX ããã®åäœã POSIX æºæ ã§ãããšèªããŠããŸãã
ã©ã®ç°å¢ã§ã sh ãå«ãŸããŠãããšããã®ã¯çŸåšã§ãåãã§ãããsh ã®æå³ããã€ãŠã® Bourne ã·ã§ã«ãæãæå³ã®èšèãã POSIX ã«æºæ ããããŸããŸãªã·ã§ã«ã«å€åããŸããããããŠããããã® POSIX ã·ã§ã«ã«ã¯å®å
šãªäºææ§ã¯ãããŸãããsh ã³ãã³ãã¯ã©ã®ç°å¢ã§ãåããŸãããsh ã³ãã³ãã§å®è¡ãããã·ã§ã«ã¯ç°å¢ã«ãã£ãŠç°ãªããšããã®ãä»ã®ã·ã§ã«ã®äžçã§ãã
ãsh ã¯ç§»æ€æ§ãé«ããã¯æã®èãæ¹
ãsh ã¯ç§»æ€æ§ãé«ãããšèšã£ãŠãã人ã¯ããããã sh ã Bourne ã·ã§ã«ã ãšæãããã§ããã®ã§ãããã30 å¹Žã®æä»£ã®å€åãèæ
®ããŠããŸãããããŸããŸãªã·ã§ã«ã sh ãåä¹ãããã«ãªã£ããšããäºå®ããäžã€ã®çµè«ãå°ãåºãããŸããsh = Bourne ã·ã§ã«ã ã£ãæã¯ sh ã§åããã·ã§ã«ã¹ã¯ãªããã¯ãä»ã® shïŒBourneã·ã§ã«ïŒã§åãå¯èœæ§ã¯é«ããã®ã§ããããçŸåšã¯ sh = POSIX ã·ã§ã«ã®ã©ãããªã®ã§ãç¹å®ã®ç°å¢ã® sh ã§åããã·ã§ã«ã¹ã¯ãªãããä»ã®ç°å¢ã§ãã®ãŸãŸåãä¿èšŒã¯ãããŸããã
- 1970幎代
- sh 㯠Thompson ã·ã§ã«ïŒæåã® Unix ã·ã§ã«ïŒã ã£ã
- 1980幎代 ã 1990 幎代äžé
- sh 㯠Bourne ã·ã§ã«ãŸã㯠Bourne ã·ã§ã«äºæã·ã§ã«ã®æå³ã ã£ã
- ãsh ã®ç§»æ€æ§ãé«ããã¯ãã®é ã®èãæ¹ãsh = Bourne ã·ã§ã«ã ãã
- 1990 幎代äžé ïœ 2000 幎代
- sh ã®å€ã㯠Bourne ã·ã§ã«ãããPOSIX ã·ã§ã«ãžå€åãã ãã
- 2010 幎代
- Bourne ã·ã§ã«ã¯ã»ãŒäœ¿ãããªããªããPOSIX ã·ã§ã«ãäž»æµãšãªã£ã
- sh â Bourne ã·ã§ã«ãšãªã£ã
- 2020 幎代以é
- Bourne ã·ã§ã«ã¯å®å šã«ãªããªããsh ã¯å€æ°ã® POSIX ã·ã§ã«ã®å¥åãšãªã£ã
- sh = 倿°ã® POSIX ã·ã§ã«ã®ã©ãããªã®ã§ãsh ã®ç§»æ€æ§ã¯é«ããªãã
POSIX ã§æšæºåãããæ©èœããæããªãã·ã§ã«ãšãããã®ã¯ãããŸãããå
ã
POSIX ã·ã§ã«ã¯ KornShell ã®ãµãã»ãããšããŠäœãããŠãããKornShell ã¯æåããæ¡åŒµæ©èœãæã£ãŠããŸããããããŠä»ã®ã·ã§ã«ã¯ KornShell äºæãç®æããŠããã®ã§åããæ¡åŒµæ©èœãæã£ãŠããŸãããFreeBSD sh ã NetBSD sh ã§ãããPOSIX ã§æšæºåãããŠããªãæ¡åŒµæ©èœãæã£ãŠããŸããäŸãã° FreeBSD sh ã NetBSD sh ã§äœ¿ãã local ã³ãã³ã㯠POSIX ã§æšæºåãããŠããªãæ¡åŒµæ©èœã§ããFreeBSD sh ã NetBSD sh ã§åãããããšèšã£ãŠãPOSIX ã«æºæ ããæ©èœã ãã䜿ã£ãŠãããšããããšã«ã¯ãªãããä»ã®ç°å¢ïŒäŸãã° dashïŒã§åããšã¯éããŸããã
çŸåš Linux ãå€ã䜿ãããŠãããšããçç±ãã sh ã§èµ·åããã·ã§ã«ã®å€ã㯠dash ãŸã㯠bash ã®ã©ã¡ããã§ããããmacOS ã§ã sh ã§èµ·åããã·ã§ã«ã¯ïŒå€ãããŒãžã§ã³ã®ïŒbash ã§ããdash 㯠POSIX ã§æšæºåãããŠããªãæ¡åŒµæ©èœãå°ãªãã·ã§ã«ã§ããããã«ããã€ãæåã«å¯Ÿå¿ããŠããªããšããæå³ã§å®å
šã« POSIX ã«æºæ ããŠããããã§ã¯ãããŸããããã«ããã€ãæåã«å¯Ÿå¿ããªããšããã®ã¯ãããã dash ã®æ¹éã§ããããä»åŸã察å¿ãããªããšæãããŸãã
çŸåšã§ã¯ sh ã§èµ·åããæ©èœãç°ãªãã·ã§ã«ãè€æ°ãããããsh ã§åãã·ã§ã«ã¹ã¯ãªãããæžããŠãç§»æ€æ§ã¯å®å
šãªãã®ã«ã¯ãããŸãããsh ã¯åç°å¢ã§æšæºã§ã€ã³ã¹ããŒã«ãããŠããã·ã§ã«ãªã®ã§ãäœãã€ã³ã¹ããŒã«ããªããŠãåããšããã¡ãªãããæãã ãã§ãããããäœã远å ã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããªãã§ã³ã³ãã¥ãŒã¿ã䜿ãããšãªããŠãããŸãããããsh ã§åãããšã«ã¡ãªãããããã®ã¯äžç¹å®ã®äººã«é
åžããã·ã§ã«ã¹ã¯ãªãããããã§ããäœãã€ã³ã¹ããŒã«ããªãã§äœ¿ãããšããã¡ãªããã¯ã»ãšãã©ãªããªããŸãããbash ã ksh93 ãªã©ã¯ïŒã€ã³ã¹ããŒã«ããã ãã§ïŒã©ã®ç°å¢ã§ãåãã·ã§ã«ãªã®ã§ãbash ã ksh93 çšã«ã·ã§ã«ã¹ã¯ãªãããæžãã°ãã©ã®ç°å¢ã§ãã·ã§ã«ã¹ã¯ãªããã¯åããŸãã
30 幎åãšã¯äžçãå€ãããŸãããBourne ã·ã§ã«ãäž»æµã®é ã¯ãªãŒãã³ãœãŒã¹ãšããèãæ¹ãæ®åããŠãããã¡ãŒã«ãŒãæäŸããŠãã Unix ããã®ãŸãŸäœ¿ããOS 以å€ã¯èªåãã¡ã§éçºãããšããæä»£ã§ãããPOSIX ã§æšæºåãããåã¯å¥ã®ã·ã§ã«ã䜿ãããã«ã¯ C èšèªã³ã³ãã€ã©ãªã©ãããªãã®ããŒã«ãå¿
èŠã§ã€ã³ã¹ããŒã«ã¯é£ããäœæ¥ã§ããããçŸåšã¯ããã±ãŒãžç®¡çã·ã¹ãã ããã€ã³ã¹ããŒã«ããã ãã§ãã远å ã®ãœãããŠã§ã¢ã¯äžè¬çã« Unix æšæºã³ãã³ããããæ©èœãããã©ãŒãã³ã¹ãåªããŠããŸãã/bin/sh ãç§»æ€æ§ãé«ããšããã®ã¯ sh = Bourne ã·ã§ã«ã ã£ãæä»£ã®èãæ¹ã§ããPOSIX ã§ OS ã®ã€ã³ã¿ãŒãã§ãŒã¹ãæšæºåãããçµæãPOSIX ã«æºæ ããŠã©ã®ç°å¢ã§ãåããœãããŠã§ã¢ã¯å€§ããå¢ããŸããããã®äžã€ã bash ã§ããsh ã§åããã·ã§ã«ã¹ã¯ãªããã¯å€æ°ã®ã·ã§ã«ãèæ
®ããªããã°ãªããªããªããŸããããbash ã§åããã·ã§ã«ã¹ã¯ãªãã㯠bash ã§åãããšã ããèããã°ååã§ããbash ã¯ã©ã®ç°å¢ã§ãåããããšãã§ããã®ã§ãbash ã¹ã¯ãªããã®ç§»æ€æ§ã¯é«ããšããããšã§ãã
ç§»è¡å ã·ã§ã«ã«ã€ããŠã®è©äŸ¡
ããã§ã®è©äŸ¡ã®åºæºã¯ãBourne ã·ã§ã«ããã®ç§»è¡å ãšããŠã·ã§ã«ã¹ã¯ãªãããæžãããã®ã·ã§ã«ã§ããäŸãã° macOS ã§ã®ããã©ã«ãã®å¯Ÿè©±ã·ã§ã«ã§ãã zsh ã¯ããã©ã«ãã§ POSIX ã·ã§ã«ãšã¯ç°ãªãåäœãããŠããããzsh ã§ã·ã§ã«ã¹ã¯ãªãããæžãå Žåã¯å°ãªãã ãããšããçç±ããçããŠããŸããzsh ãå£ã£ãŠãããšããæå³ã§ã¯ãªã察話ã·ã§ã«ãšããŠäœ¿ãå Žåã«ã¯éåžžã«è¯ãã·ã§ã«ã§ããããã«æããŠãããã®ã¯ãã¹ãŠ POSIX ã·ã§ã«ã§ãããä»ã«ã mkshãyashãzsh ãªã© POSIX ã«æºæ ããŠããã·ã§ã«ã¯ãããŸãã
| ã·ã§ã« | æ±çšæ§ | æ©èœæ§ | ç§»è¡å ã®ã·ã¹ãã |
|---|---|---|---|
| bash | é«ã | 髿©èœ | LinuxãmacOSãBSD ç³» UnixãSystem V ç³» Unix |
| ksh93 / ksh93u+m | é«ã | 髿©èœ | LinuxãmacOSãBSD ç³» UnixãSystem V ç³» Unix |
| dash | æ®é | äœæ©èœ | LinuxãmacOSãBSD ç³» UnixãSystem V ç³» Unix |
| FreeBSD sh | äœã | äœæ©èœ | åºæ¬çã« FreeBSD ã®ã¿ |
| NetBSD sh | äœã | äœæ©èœ | åºæ¬çã« NetBSD ã®ã¿ |
| OpenBSD sh | äœã | äœæ©èœ | åºæ¬çã« OpenBSD ã®ã¿ |
ãã®è¡šã®æ±çšæ§ãšã¯å€ãã®ç°å¢ã§åããšããããšã§ããbash ã ksh93 ãªã©ã¯å€ãã® OS ã§åäœããŸãïŒæšæºçãªããã±ãŒãžç®¡çã·ã¹ãã ããç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãïŒãFreeBSD sh ã NetBSD sh ã¯ãOS ã®äžéšãšããŠäœãããŠããããïŒåãå¯èœæ§ã¯ãããŸããïŒååçã«ãã® OS ã«ãã察å¿ããŠããŸãããPOSIX ã§æšæºåãããŠããæäœéã®æ©èœãã䜿ããªããã°æŠãåããšã¯æããŸãããçµå±ã®ãšããäŸãã° FreeBSD sh ã§åããŠããã·ã§ã«ã¹ã¯ãªããã Linux ã§åããããšãããªãã°ãéãã·ã§ã«ã§åããããšã«ãªãã®ã§ãã¹ããå¿ èŠã«ãªããŸãã
bash
ãšã³ããŠãŒã¶ãŒãéçºè ãšãã«å©çšè ãå€ããååã§ç¶ç¶çãªã¡ã³ããã³ã¹ãšé«ãäºææ§ãå®çŸããŠããã察話ã·ã§ã«ãšããŠãã·ã§ã«ã¹ã¯ãªãããšããŠã䜿ãã髿©èœãªäžèœã·ã§ã«ã§ãã
LinuxãmacOSãBSD ç³» UnixãSystem V ç³» Unix ãšãã©ã®ç°å¢ã§ãåãã·ã§ã«ãªã®ã§ bash çšãšããŠã·ã§ã«ã¹ã¯ãªãããæžããšéåžžã«ç§»æ€æ§ãé«ãã·ã§ã«ã§ããå
šãŠã§ã¯ãããŸããã Linux ã«ã»ãŒã€ã³ã¹ããŒã«ãããŠãããRed Hat ç³» Linux ã§ã¯ã·ã¹ãã ã·ãšã« /bin/sh ãšããŠã䜿ãããŠããŸãã
POSIX ã«å³å¯ã«æºæ ãã POSIX ã¢ãŒãã«å ããŠãéå»ã® bash ã®ããŒãžã§ã³ãšã®äºææ§ãä¿ã€æ©èœïŒBASH_COMPAT åç
§ïŒãæã£ãŠããã®ã§ãããžãã¹çšéãšããŠæãé©ããã·ã§ã«ã§ãã
ksh93 / ksh93u+m
ããã€ãã®åçš Unix ã§ã¯ Bourne ã·ã§ã«ã®åŸç¶ãšããŠäž»ã« ksh ã /bin/sh ãšããŠäœ¿ãããŠããŸãããksh ã¯å
ã
ã¯ããŒãºããœãŒã¹ã§ããããåŸã« ksh93 ããªãŒãã³ãœãŒã¹ãšãªã Linux ã BSD ç³» Unix ãªã©å¹
åºãç°å¢ã§åäœããããã«ãªããŸããã2012 幎㮠ksh93u+ ãããã°ããéçºãè¡ãããŠããŸããã§ãããã2022 å¹Žã«æ°ãã« ksh93u+m ãšããŠéçºãåéããŠãããææ°ã® ksh93 ãšããŠäœ¿ããŸãã
ksh93u+m 㯠ksh93 ã®ãœãŒã¹ã³ãŒããå ã«éçºãããŠãããåçš Unix ã§ ksh93 ã䜿ã£ãŠããå Žåã®ç§»è¡å ã®ã·ã§ã«ãšããŠã䜿ããŸããã€ãŸãçŸåš ksh93 ã䜿ã£ãŠããå Žåã¯ãå¿ ããã bash çšã«æžãæããå¿ èŠã¯ãªããšããããšã§ãããã ããbash ããããŠãŒã¶ãŒæ°ãéçºè æ°ã¯å°ãªããããå°æ¥ã®ããšãèã㊠bash ã«ä¹ãæãããšãã倿ã¯ééã£ããã®ã§ã¯ãªããšæããŸããbash 㯠ksh93 ã®æ©èœãåãå ¥ããŠããããåºæ¬çãªæ©èœã¯ bash ãšäºææ§ããããŸãããã ã bash ãš ksh93 ã§ã¯ ksh93 ã®æ¹ã髿©èœã§ãããããksh93 ã®é«åºŠãªæ©èœã䜿ã£ãŠããå Žåã«ã¯ãå°æ¥çã«ç§»è¡ãããªãã° ksh93u+m ã®æ¹ãè¯ãã§ãããã
dash
dash ã¯ãDebian/Ubuntu ç³» Linux ã§ /bin/sh ãšããŠäœ¿ãããŠããã·ã§ã«ã§ããå
㯠BSD Unix ã® ash ãšåŒã°ããŠããã·ã§ã«ã®åŸç¶ã·ã§ã«ã«ããããæ¡åŒµæ©èœãå°ãªã POSIX ã·ã§ã«ã«è¿ãã·ã§ã«ã§ããdash 㯠debian ash ã®ç¥ã§ããã®åã®éã Debian çšã®ã·ã§ã«ã§ãããå€ãã®ç°å¢ã«ç§»æ€ãããŠãããmacOS ã BSD ç³»ã»System V ç³» Unix ã§ã䜿ãããšãã§ããŸãããã«ããã€ãæåã«å¯Ÿå¿ããŠããªãããå®å
šã« POSIX ã«æºæ ããŠããããã§ã¯ãããŸããã
FreeBSD sh
FreeBSD sh ã¯ãFreeBSD ã§ /bin/sh ãšããŠäœ¿ãããŠããã·ã§ã«ã§ããå
㯠BSD Unix ã§ ash ãšåŒã°ããŠããã·ã§ã«ã®åŸç¶ã·ã§ã«ã«ããããæ¡åŒµæ©èœãå°ãªã POSIX ã·ã§ã«ã«è¿ãã·ã§ã«ã§ããFreeBSD ã®äžéšãšããŠéçºãè¡ãããŠãããåºæ¬çã« FreeBSD ã§ãã䜿ããŸãããFreeBSD ã䜿çšããå Žåã®éžæè¢ã®äžã€ã§ãã
äœè«ã§ãããFreeBSD ã® root ã®ããã©ã«ãã·ã§ã«ã¯ /bin/csh ã䜿ãããŠããŸããããFreeBSD 14 ãã /bin/sh ã«å€æŽãããŸããïŒ/bin/csh ã䜿ããŸãïŒ
NetBSD sh
NetBSD sh ã¯ãNetBSD ã§ /bin/sh ãšããŠäœ¿ãããŠããã·ã§ã«ã§ããå
㯠BSD Unix ã§ ash ãšåŒã°ããŠããã·ã§ã«ã®åŸç¶ã·ã§ã«ã«ããããæ¡åŒµæ©èœãå°ãªã POSIX ã·ã§ã«ã«è¿ãã·ã§ã«ã§ããNetBSD ã®äžéšãšããŠéçºãè¡ãããŠãããåºæ¬çã« NetBSD ã§ãã䜿ããŸãããNetBSD ã䜿çšããå Žåã®éžæè¢ã®äžã€ã§ãã
OpenBSD sh
OpenBSD sh ã¯ãOpenBSD ã§ /bin/sh ãšããŠäœ¿ãããŠããã·ã§ã«ã§ããå
㯠pdksh ãšåŒã°ãã ksh88 ãããŒã¹ã«ãããªãã¯ãã¡ã€ã³ã§åå®è£
ãããã·ã§ã«ã®åŸç¶ã·ã§ã«ã«ããããŸããksh ãšããã³ãã³ãåã§èµ·åã§ããŸãããAT&T æ¬å®¶ã® ksh88 ã§ã¯ãªãã®ã§æ³šæããŠãã ãããé
åãªã©ã䜿ãããšãã§ããã®ã§ãããksh88 ããŒã¹ã®å€ãé
åã§ãããã bash ã ksh93 ãšäºææ§ããããŸãããOpenBSD ã®äžéšãšããŠéçºãè¡ãããŠãããåºæ¬çã« OpenBSD ã§ãã䜿ããŸãããOpenBSD ã䜿çšããå Žåã®éžæè¢ã®äžã€ã§ãã
Bourne ã·ã§ã«ã®çµçã§å¬ããããš
Bourne ã·ã§ã«ããªããªããšããããšã¯ããã¯ã Bourne ã·ã§ã«ãèæ ®ããŠã·ã§ã«ã¹ã¯ãªãããæžãå¿ èŠããªããªã£ããšããããšã§ããBourne ã·ã§ã«ã§äœ¿ããªããããšãã£ãŠæ°ããæ©èœã®äœ¿çšã諊ããå¿ èŠã¯ãªããæäœã©ã€ã³ã POSIX ã·ã§ã«ã«ããããšãå¯èœã§ãã以äžã«å¬ããããšãæããŠããŸããããããã¯ããäžéšã§ããBourne ã·ã§ã«ãš POSIX ã·ã§ã«ã®éãã«ã€ããŠã¯ä»¥äžãåç §ããŠãã ããã
æ°å€èšç®ã« expr ã³ãã³ãã䜿ããªããŠè¯ããªã£ã
ãã€ãŠ Bourne ã·ã§ã« ã§ã¯æ°å€èšç®ã« expr ã³ãã³ãã䜿ããªããã°ãªããŸããã§ããããBourne ã·ã§ã«ã®çµçã§ãã®å¿
èŠã¯ãªããªããŸãããexpr ã³ãã³ãçžåœã®æ°å€èšç®æ©èœã¯ POSIX ã·ã§ã«ã§æšæºåããçµã¿èŸŒãŸããŠããŸããsh ã§ã¯ expr ã³ãã³ãã䜿ããªããã°ãããªããšããã®ã¯éå»ã®è©±ã§ãã
å
šãŠã®ã·ã§ã«ã§ test / [ ... ] ãã·ã§ã«ã«çµã¿èŸŒãŸãã
éå»ã«ã¯ test / [ ... ] ãå€éšã³ãã³ãã§ãã£ããããããã©ãŒãã³ã¹ããããããã« case ã§ä»£çšããŠããäºããããŸãããçŸåšã¯ãã¹ãŠã® POSIX ã·ã§ã«ã§ã·ã§ã«ã«çµã¿èŸŒãŸãããããæååã®æ¯èŒã§ case ã䜿ãå¿
èŠã¯ãããŸããã
ç°¡åãªæåååŠçãã·ã§ã«ã®å€æ°å±éã§è¡ããããã«ãªã£ã
Bourne ã·ã§ã«ã«ã¯æåååŠçãè¡ãæ¹æ³ã¯ãæååçµåãš IFS ã䜿ã£ãåèªåå²ä»¥å€ãããŸããã§ããããã®ãã sed ãªã©ã®å€éšã³ãã³ãã«é ŒãããåŸãŸããã§ãããçŸåšã¯æåååŠçã¯ã·ã§ã«èªèº«ã§è¡ãããããç°¡åãªæåååŠçã«å€éšã³ãã³ãã䜿ãå¿
èŠã¯ãããŸããããããã©ãŒãã³ã¹ãåäžããŸãããPOSIX ã§æšæºåããã©ã®ç°å¢ã§ã䜿ãã倿°å±éã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
${var#pattern} # 倿°varã®åæ¹ãããã¿ãŒã³patternã«äžèŽïŒæå°äžèŽïŒãããã®ãåãé€ã
${var##pattern} # 倿°varã®åæ¹ãããã¿ãŒã³patternã«äžèŽïŒæå€§äžèŽïŒãããã®ãåãé€ã
${var%pattern} # 倿°varã®åŸæ¹ãããã¿ãŒã³patternã«äžèŽïŒæå°äžèŽïŒãããã®ãåãé€ã
${var%%pattern} # 倿°varã®åŸæ¹ãããã¿ãŒã³patternã«äžèŽïŒæå€§äžèŽïŒãããã®ãåãé€ã
OS ã«äŸåããªãã·ã§ã«ã倿°æŽŸã«ãªã£ã
æã¯ã·ã§ã«ã¯ OS ã«çµã¿èŸŒãŸããŠãããOS æšæºã·ã§ã«ä»¥å€ã䜿ãããšã¯ããŸãèããããŠããŸããã§ãããããã OS ã«çµã¿èŸŒãŸããŠããã·ã§ã«ã¯ä»ã® OS ã§ã¯åããããã®ãã POSIX ã§ã·ã§ã«ãæšæºåãããOS ãéã£ãŠãã ãããåããããªåããããããã«ãªã£ãŠããŸããããããçŸåšã¯ bashãksh93u+mãdash ãªã©ãç¹å®ã® OS ã«äŸåããªãã·ã§ã«ãæ®åããŸãããOS å°çšã®ã·ã§ã«ãšã¯ç°ãªã OS ã«äŸåããªãã·ã§ã«ã¯ã©ã®ç°å¢ã§ãåããŸãããªãŒãã³ãœãŒã¹ãšãªã誰ã§ãèªç±ã«äœ¿ãããšãåºæ¥ãŸããOS æšæºã®ã·ã§ã«ã䜿ãããšã远å ã§ã·ã§ã«ãç°¡åã«ã€ã³ã¹ããŒã«ããŠäœ¿ããããšãåœããåãšãªããŸããã
Bourne ã·ã§ã«çšã®æžãæ¹ãããªããŠè¯ããªã£ã
ãã€ãŠã¯ sh ã§ã¯ Bourne ã·ã§ã«ã«å¯Ÿå¿ããæžãæ¹ãå¿
èŠã§ãããããããå¿
èŠãªããªããŸãããBourne ã·ã§ã«çšã®æžãæ¹ãšã¯æ¬¡ã®ãããªãã®ã§ãã
VAR=123; export VAR
# export VAR=123 㯠POSIX ã·ã§ã«ä»¥éã®æžãæ¹
# 泚æ ã³ãã³ã眮æãšçµã¿åãããŠäœ¿ãå Žåã¯äžæŠå€æ°ã«å
¥ããªããšãšã©ãŒãæ€åºã§ããªãã®ã§
# export VAR=$(cmd) ãšããæžãæ¹ã¯æšå¥šããªãïŒå€æ°ãžã®ä»£å
¥ãšexportã¯åããŠæžãïŒ
VAR=`cmd` # ã³ãã³ã眮æããã¹ãããå Žåã«èªã¿ã«ãããªã
# VAR=$(cmd) ã POSIX ã·ã§ã«ä»¥éã®æšå¥šãããæžãæ¹
å€ãã·ã§ã«ã®ãã°ã®åé¿çãå¿ èŠãªããªã£ã
å€ãã·ã§ã«ã«ã¯ãã°ãããã€ããããŸãããä»ããŸã£ãããªããšããããã§ã¯ãããŸãããããã®æ°ã¯å€§ããæžã£ãŠããŸããéå»ã«ã¯ç¹å®ã®ã·ã§ã«ã®ãã°ãåé¿ããããã«ãäžèŠèŠãã ãã§ã¯ã©ã®ãããªæå³ããããããããªãåé¿çãçšããããŠããŸãããäŸãã°æ¬¡ã®ãããªãã®ã§ãã
[ x"$str" = xfoo ]
# çŸåšã¯çŽ çŽã« [ "$str" = foo ] ãšããã°è¯ã
# æã¯ str ã« -z ã ! ãªã©ãå
¥ããšæŒç®åãšããŠæ±ããããã°ããã£ã
cmd ${1+"$@"}
# çŸåšã¯ cmd "$@" ãšããã°è¯ã
# æã¯äœçœ®ãã©ã¡ãŒã¿ããªããšãã«ã"$@" ã "" ïŒäžã€ã®ç©ºæåïŒãšããŠæ±ãããŠãã
ç§»è¡æã®æ³šæç¹
/bin/sh ã ãããšãã£ãŠå
šãŠåãåããããããã§ã¯ãªã
sh ã¯ç°å¢ããšã«å®è£ ãç°ãªããåäœã«éãããããŸããäŸãã° FreeBSD sh ãš NetBSD sh ã¯ã©ã¡ãã ash ããŒã¹ã®æ¡åŒµæ©èœãå°ãªãã·ã§ã«ã§ããããã® 2 ã€éã§ããåäœã®éããæ¡åŒµæ©èœã®éãããããŸããPOSIX ã¯æ¡åŒµæ©èœã®å®è£ ãçŠæ¢ããŠããŸããããPOSIX ã§æšæºåãããŠããç¯å²ã§ãã£ãŠãåäœã®éãã蚱容ããŠããéšåããããŸããããã€ãäŸãäžããŸããããããã㯠FreeBSD sh ã NetBSD sh ã§ã¯åãããä»ã®ã·ã§ã«ã§ã¯åããªãã³ãŒããFreeBSD sh ãš NetBSD sh ã®éãã®äŸã§ãã
VAR1=123 VAR2=456
VAR1=$VAR2 VAR2=$VAR1
echo "$VAR1 $VAR2" # => ã456 123ããšåºåãããã®ã¯ FreeBSD sh ãš NetBSD sh ã ã
# FreeBSD sh ãš NetBSD sh 㯠then ãš else ã®éãçç¥ã§ãã
if false; then
# POSIXã·ã§ã«ã¯ãããçç¥ã§ããªã
else
echo "false"
fi
# FreeBSD sh ã§ã¯ == ã«å¯Ÿå¿ããŠããããNetBSD sh ã¯é察å¿ïŒNetBSD 10 æç¹ïŒ
if [ foo == foo ]; then
echo "true"
fi
v="foo bar"
export V=$v # readonly ã local ã§ãåæ§
echo "$V" # FreeBSD shã¯ãfoo barããNetBSD㯠shãfooã
ä»ã«ããlocal ã³ãã³ããbuiltin ã³ãã³ããjobid ã³ãã³ããsetvar ã³ãã³ããªã©ãPOSIX ã§æšæºåãããŠããªãã³ãã³ãã䜿ããŸãããä»ã®ã·ã§ã«ã§åäœãç°ãªãéšåããããŸãã
total=0
seq 10 | while IFS= read -r i; do
total=$((total + i))
done
echo "$total" # => 0 ïŒkshãšzshã§ã¯55ãšåºåãããïŒ
ç°¡åã«èšããªãã°ã/bin/sh ã§åãã·ã§ã«ã¹ã¯ãªãããæžãã®ã§ããã°ã察å¿ããªããã°ãããªãç°å¢ã® /bin/sh ïŒè€æ°ã®çš®é¡ã®ã·ã§ã«ïŒã§åãããšããã£ãããã¹ãããå¿
èŠããããšããããšã§ããéã«ç¹å®ã®ç°å¢ã« OS ã«äŸåããªã bash ã ksh ãã€ã³ã¹ããŒã«ããã°ããããã®ã·ã§ã«ã§åãããšã ãããã¹ãããã°è¯ããšããããšã§ãã
ãã£ãšãã·ã§ã«ã¹ã¯ãªããã«ç§»æ€æ§ãæããããå Žåã¯ãã·ã§ã«ã ãã§ã¯ãªãå©çšããŠããå€éšã³ãã³ãã®åäœã®éãã«ã察å¿ããå¿ èŠãããã®ã§ãã·ã§ã«ã ããã€ã³ã¹ããŒã«ããã°åé¡ã解決ãããšããããã§ã¯ãããŸããããå°ãªããšãã·ã§ã«ã®åé¡ã¯è§£æ±ºããŸãã
POSIX ã·ã§ã«ã¯ Bourne ã·ã§ã«ã®å®å šäžäœäºæã·ã§ã«ã§ã¯ãªã
POSIX ã·ã§ã«ã¯ Bourne ã·ã§ã«ã®å®å šäžäœäºæã·ã§ã«ã§ã¯ãããŸãããBourne ã·ã§ã«ã§æ£ããåããŠããã·ã§ã«ã¹ã¯ãªããããPOSIX ã·ã§ã«ã§åãããã«åããšã¯éããŸãããPOSIX ã·ã§ã«ã¯ Bourne ã·ã§ã«ã«æ©èœã远å ããã ãã§ã¯ãªãäžéšã®åäœãå€ãã£ãŠããã®ã§äºææ§ããªãéšåããããŸããäŸãã°æ¬¡ã®äŸã¯ Bourne ã·ã§ã«ãã POSIX ã·ã§ã«ã«ç§»è¡ãããšåããªããªãäŸã§ãã
#!/bin/sh
i=123
# ãµãã·ã§ã«ã䜿ãããã®ã§ i ã¯ããŒã«ã«å€æ°çžåœ
while read i; do
echo "$i"
done < file.txt
echo "$i" # => Bourne ã·ã§ã«ã§ã¯ 123ãPOSIX ã·ã§ã«ã§ã¯éåžžã¯ç©ºæå
POSIX ã·ã§ã«ã¯ Bourne ã·ã§ã«ã®å®å šãªäžäœäºæã·ã§ã«ã§ã¯ãªãã®ã§ç§»è¡ããéã«ã¯ãã¹ããå¿ èŠã§ãã
ãããã«
ãããããã Bourne ã·ã§ã«ã®ããšã¯å¿ããŸãããã