ã¯ããã«
ã¿ã€ãã«ã¯ãUnixèå€åŠãã®ãã¯ãªã§ãããã®èšäºãšçŽæ¥ã®é¢ä¿ã¯ãããŸãããUnix èªçæç¹ã®ã·ã§ã«ãã POSIX ã·ã§ã«ãçå®ããããŸã§ã®ã·ã§ã«ã®æŽå²ã調ã¹ãŠã¿ãŸããããµãã¿ã€ãã«ã埮åŠã«ã¿ã€ãã«ãšãããŠãæãããããããããŸãããããã®èšäºã¯ããšããšã·ã§ã«ã¹ã¯ãªããã¯äœãç®æããŠèšèšãããèšèªãªã®ãçåã«ãªã£ãŠèª¿ã¹å§ãããã®ã ããã§ããæã ãã·ã§ã«ã¹ã¯ãªãããããªããŠæ¬ç©ã®ããã°ã©ãã³ã°èšèªã§æžãã¹ãã ããšãããããªè©±ãç®ã«ããŸãããå®éã¯ã·ã§ã«ã¹ã¯ãªããã¯ããã°ã©ãã³ã°èšèªãªã®ãïŒããã§ã¯ãªãã®ãïŒãªã®ã§ãããããµãã¿ã€ãã«ã®ã»ããæ¬é¡ã§ãã
ãœãŒã¹ã¯ wikipediaïŒæ¥æ¬èªçã¯æ å ±ãå€ãã®ã§äž»ã«è±èªçïŒããã³ããããã®å€éšãªã³ã¯ãªã©ãé©åœã«èª¿ã¹ãŠãŸãšãããã®ã§ããå 容ã«çåã«æããå Žåã¯ç¬èªã§èª¿ã¹ãã®ãããããããŸããã¡ãªã¿ã« ~sven_mascheck/ ã¯ããããã§ãããã®èšäºãšã¯æ¯ã¹ç©ãªããªãå§åçãªæ å ±éãèªã£ãŠããŸãïŒäŸãã° #! ã®ç±æ¥ãšãïŒãPWB ã·ã§ã«ã«é¢ããŠã¯ãUnix èå€åŠããåç §ããŸããããŸãç§ã®èå³ã®å¯Ÿè±¡ã POSIX ã·ã§ã«ãããã³ãã®å ãšãªã£ã KornShell ãšãã®çŽç³»ã®å ç¥ã§ãã Bourne ã·ã§ã«ãªã®ã§ C ã·ã§ã«ããã®ä»ã®ã·ã§ã«ã«ã€ããŠã¯æäœéãã調ã¹ãŠããŸãããæ°ãåããã远èšãããããããŸãããããééããªã©ãããã°æããŠããã ãããšå©ãããŸãã
**2021-06-04 è¿œèš ãã®èšäºãæžããçµç·¯ãšãçµè«ã«èå³ããã人ãž**
The shell is an actual programming language. That's how it was designed and advertised right from the early days of the Bourne shell. Unfortunately, few take it seriously as such.
ïŒã·ã§ã«ã¯å®éã«ããã°ã©ãã³ã°èšèªã§ããBourne ã·ã§ã«ã®æåãããã®ããã«èšèšãã宣äŒãããŠããŸãããæ®å¿µãªããšã«ãããæ¬æ°ã«ãã人ã¯ã»ãšãã©ããŸãããïŒ
ãæ®å¿µãªããšã«ãããæ¬æ°ã«ãã人ã¯ã»ãšãã©ããŸãããã£ãŠããã®ã¯ç§ãåãæãã§ãããããã¯ãããšããŠæ°ã«ãªã£ãã®ã¯ãBourne ã·ã§ã«ã®æåãããã®ããã«èšèšãã宣äŒãããŠããŸããããšããæã§ããã·ã§ã«ã¹ã¯ãªãããããã°ã©ãã³ã°èšèªã§ãããšããã®ã¯ã䜿ã£ãŠããã°ãããããšãªã®ã§ããããã®ããã«èšèšãã宣äŒãããŠãããšããããã«ã¯ãã®èšŒæ ãååšããŠããã¯ãã§ãã
ãã®ããã¥ã¡ã³ããæžãã Martijn Dekker ãããåã«ã·ã§ã«ã¹ã¯ãªããã奜ããªã ãã®äººãšããã®ãªãç§ãæ°ã«ã¯æ¢ããªãã£ããšæããŸããããã®æ¹ã¯çŸåš POSIX ã·ã§ã«ã®äžã€ã§ãã KornShell (ksh) ææ°çïŒã®ææååè£ïŒã® ksh 93u+m ã®ã¡ã³ããã³ã¹ããããŠããæ¹ã§ãããªãªãžãã«ã®éçºè ã§ã¯ãããŸãããã·ã§ã«ãæ£ããçè§£ããŠããéçºè ã®äžäººãšèšããã§ããããåã«ïŒèšå€§ãªæ°ã®ïŒæ¢åã®ããããé©çšããŠããã ããšããããã§ã¯ãªãããã®ã³ãŒãã®æå³ãå®å šã«çè§£ããäžã§ïŒåœããåãªãã§ããä»äººãæžããã³ãŒããçè§£ãã倧å€ãã¯ããããŸãããïŒïŒä¿®æ£ãè¡ããšå ¬èš ãããŠããç¬èªã®ä¿®æ£ãè¡ã£ãŠããŸãããŸããã®ä¿®æ£å 容ãåŸã®ã¡ã³ããã®ããã«ã³ãããã¡ãã»ãŒãžã«å®å šã«ææžåããïŒäŸïŒãšããã¹ããªã¯ããªããæ¹ã§ã¡ã³ããã³ã¹ãããŠããŸãããã®ãããªæ¹ãå ·äœçãªæ ¹æ ããªãããã°ã©ãã³ã°èšèªãšããŠèšèšãã宣äŒãããŠãããšèšããšã¯æããŸãããæåã¯ç°¡åã«èŠã€ãããªãã ãããšæã£ãŠèããŠã¿ããããšæã£ãã®ã§ããããã®åã«èªåã§èª¿ã¹ãã¹ãã ãªãšæã£ãŠèª¿ã¹ããæå€ãšç°¡åã«èŠã€ãã£ããšããæµãã§èšäºãšããŠãŸãšããããšã«ããŸããã
ãªã®ã§ç§ãšããŠã¯ãã®ããã¥ã¡ã³ãå 容ãäºå®ã§ããããšã®èª¿æ»ã»æ€èšŒãè¡ã£ãã ããªã®ã§ãæ¬ç©ã®ããã°ã©ãã³ã°èšèªã ã£ããããšããçµè«ã§ãã®èšäºã®è©±ã¯çµãããªã®ã§ãã
ã"æ¬ç©ã®ããã°ã©ãã³ã°èšèª"ã ãããªã«ïŒããšãã®å ãèããããŠãããããªã人ã®ããã«çãããšãããããã«ã·ã§ã«ã¹ã¯ãªããã«ã¯äžè¬çãªããã°ã©ãã³ã°èšèªã®æè¡ãå¿çšã§ãããšããããšã§ãããã¡ããã·ã§ã«ã¹ã¯ãªãããã©ããªããšã«ã䜿ããæ±çšã®ããã°ã©ãã³ã°èšèªãšã¯æã£ãŠã¯ããŸããã Unix ç°å¢ïŒã€ãŸãå€éšã³ãã³ãã®åŒã³åºãïŒã«ç¹åããŠããããã°ã©ãã³ã°èšèªã ãšã¯æã£ãŠããŸããã·ã§ã«ã¹ã¯ãªããç¹æã®æè¡ïŒãã€ãã§ç¹ããšãïŒãããã®ã¯ãã®éãã§ããããããšåæã«ããã°ã©ãã³ã°èšèªãšããŠèšèšãããŠããã®ã§ããã°äžè¬çãªããã°ã©ãã³ã°èšèªã®æè¡ãå¿çšã§ããã ãããšãã仮説ããªããã¡ãŸãããããŠå®éã«ã·ã§ã«ã¹ã¯ãªããã§äžè¬çãªããã°ã©ãã³ã°èšèªã®æè¡ãå¿çšããããšãã§ããŸãããçŸåšãã®æè¡ãåºããããã«å·çäžïŒè²ã ãã£ãŠé ããŠãŸãã»ã»ã»ïŒã§ããããŸããã®åã«ã·ã§ã«ã¹ã¯ãªãããæ¬ç©ã®ããã°ã©ãã³ã°èšèªã§ãããšããããšãäŒããããšã«ããŸããã
ã·ã§ã«ã¹ã¯ãªãããæ¬ç©ã®ããã°ã©ãã³ã°èšèªã§ãããšåæã«ç«ã€ããšã§èŠããŠããæè¡ïŒãšãã£ãŠãä»ã®èšèªã®æè¡ã®å¿çšã«éããªãã®ã§ããã»ã»ã»ïŒã¯è¿ããã¡ã«å ¬éããŸãã®ã§ãæ¬ç©ã®ããã°ã©ãã³ã°èšèªã ãããã®ç¶ããæ°ã«ãªã£ãŠãããããªãæ¹ã¯ãã°ããæ¥œãã¿ã«ããŠãåŸ ã¡äžããã
çšèªã®ç¢ºèª
ãããªãã§ããåé¡ã§ããUnixïŒåçš UNIX ãå«ãæ£çµ±ãªç³»çµ±ïŒã®æŽå²ã«ãããŠã·ã¹ãã ã·ã§ã« (/bin/sh) ã¯ãªããšããååã®ã·ã§ã«ã§ããããïŒ
çã Thompson ã·ã§ã« â PWB ã·ã§ã« â Bourne ã·ã§ã« â POSIX ã·ã§ã« (kshïŒãšå€åããŠããŸããïŒåèïŒ
Unix ã®ã·ã¹ãã ã·ã§ã«ã®ãã¹ã¯äŒçµ±çã« /bin/sh ã䜿ãããŠããŸãããåžžã«äºææ§ãä¿ãããŠããããã§ã¯ãããŸãããPWB ã·ã§ã« 㯠Thompson ã·ã§ã« ã®äžäœäºæã·ã§ã«ã§ãããPOSIX ã·ã§ã«ã¯ Bourne ã·ã§ã« ã®äžäœäºæã·ã§ã«ã§ãããå 2 ã€ãšåŸã 2 ã€ã®éã«ã¯äºææ§ããããŸããã
Bourne ã·ã§ã«ãšã¯ã¹ãã£ãŒãã³ã»ããŒã³ãéçºããã·ã§ã«ã®äºãæããŸããåéããããããïŒïŒïŒã§ãã bash 㯠Bourne ã·ã§ã«ã§ã¯ãããŸãããbash 㯠Bourne ã·ã§ã«ã®äžäœäºæã§ãããããBourne ã·ã§ã«ïŒBã·ã§ã«ïŒç³»ããšãäºæã·ã§ã«ãšåŒã¶ãªãæ£ããã®ã§ãã Bourne ã·ã§ã«ãã®ãã®ã§ã¯ãããŸããããŸã dash ã bash ãªã©çŸåšã®äž»æµã®ã·ã§ã«ã¯ãPOSIX ã«æºæ ããã·ã§ã«ã〠Bourne ã·ã§ã«ç³»ãã§ãã **Bourne ã·ã§ã«ãã®ãã®ã¯ POSIX ã«æºæ ããŠããŸããã**ããããããªãã®ã§ Bourne ã·ã§ã«ãšããååã¯éå»ã®ã·ã§ã«ã®ååãšããŠäœ¿ããçŸåšã® POSIX ã«æºæ ããã·ã§ã«ã¯ãPOSIX ã·ã§ã«ããšåŒã¶ããšãããããããŸãã
è£è¶³ å®ã¯ POSIX ã§ã¯ã·ã¹ãã ã·ã§ã«ã®ãã¹ã¯ /bin/sh ãšã¯èŠå®ãããŠããŸããã
Applications should note that the standard PATH to the shell cannot be assumed to be either /bin/sh or /usr/bin/sh, and should be determined by interrogation of the PATH returned by getconf PATH, ensuring that the returned pathname is an absolute pathname and not a shell built-in.
è£è¶³2 B ã·ã§ã«ãš bsh ã«ã€ããŠ
å
¬åŒã« C ã·ã§ã«ïŒC ShellïŒãåä¹ã£ãŠãã csh ãšã¯éã£ãŠ B ã·ã§ã«ãšããåŒã³æ¹ã¯æ¥æ¬ç¬èªãªããããªããïŒãšçã£ãŠãããããŸããå°ãªããšã /bin/bsh ãšãããã¹ã¯éå»ïŒïŒïŒã«äœ¿ãããŠãããäžè¬çã« /bin/bsh ã®å®äœã¯ Bourne ã·ã§ã«ãšãªã£ãŠããããã§ãïŒåèïŒããããæ€çŽ¢ããŠã¿ããš /bin/bsh 㯠/bin/ash ãžã®ã·ã³ããªãã¯ãªã³ã¯ãšãªã£ãŠããç°å¢ããã£ãããã§ããããã¯åæã® ash ã Bourne ã·ã§ã«ã®ã¯ããŒã³ã ã£ãããã ãšæãããŸãïŒçŸåšã® ash 㯠POSIX ã·ã§ã«ãªã®ã§ Bourne ã·ã§ã«ãšã¯å®å
šãªäºææ§ããªãïŒã
C ã·ã§ã«ãšèšã£ãæãããã csh ã ãã®äºãæããŠããŠã tcsh ãå«ãã C ã·ã§ã«ç³»ãæããŠããŠãããŸã倧差ãªãã®ã§ãããB ã·ã§ã«ãšèšã£ãæ Bourne ã·ã§ã«ã ãã®äºãå·®ããŠããã®ãïŒãããšã Bourne ã·ã§ã«ç³»ã®æå³ã§äœ¿ã£ãŠãã®ãããããããŸãããbash ãæã㊠B ã·ã§ã«ãšèšããªããã㯠B ã·ã§ã«ç³»ãšããæå³ã§ãã ashãkshãzsh ã B ã·ã§ã«ã«ãªã£ãŠããŸããŸãã ãã¡ãã POSIX ã«æºæ ããŠãªãå€ã Bourne ã·ã§ã«ã B ã·ã§ã«ç³»ã«å«ãŸããŸããã¯ãããŠæ¬åœã«ããããæå³ã§äœ¿ã£ãŠãã®ãã©ããããããããã®ã§ B ã·ã§ã«ã bsh ã䜿ãã®ããããŠãæ£åŒãª Bourne ã·ã§ã«ã bash ãªã©ã®å ·äœçãªã·ã§ã«åãèšãã POSIX ã·ã§ã«ãšèšã£ãã»ããè¯ãã§ãããã
ã·ã§ã«ã¹ã¯ãªãããããã°ã©ãã³ã°èšèªã§ããçç±
PWB ã·ã§ã«ã®éçºè ã®è«æã«ãUsing a Command Language as a High-Level Programming Languageããšããã®ããããŸãããããçç±ã®äžã€ã§ãããã¿ã€ãã«éã PWB ã·ã§ã«ã¯ããã°ã©ãã³ã°èšèªãšããŠäœ¿ãããšãç®çãšããŠéçºãããŠããŸããïŒHigh-Level Programming Language = 髿°Žæºèšèªã¯èšãéããããããŸãããåœæã®ç¶æ³ãèžãŸããŠããŸãçªã£èŸŒãŸãªãããã«ããŸããããïŒCommand LanguageïŒã³ãã³ãèšèªïŒãšããã®ã¯èãæ £ããªãçšèªãããããŸãããã·ã§ã«ã¹ã¯ãªããã®èšèªåçžåœã®åŒã³åã§ãçŸåšã® POSIX ã·ã§ã«ã®èšèªä»æ§ãæžããããŒãžã®ã¿ã€ãã«ã Shell Command Language ïŒã·ã§ã«ã³ãã³ãèšèªïŒã§ãã
æ®å¿µãªãã PWB ã·ã§ã«ã¯ Thompson ã·ã§ã«ãšã®äºææ§ãä¿ã€å¿ èŠããæå°éã®æ©èœæ¡åŒµã«ãšã©ãŸããæç¶ãåããã°ã©ãã³ã°èšèªãšèšããªãã¯ãªãã§ããæ©èœçã«ã¯ Windows ã®ããããã¡ã€ã«çšåºŠã«ãããªããŸããã§ããããããéèŠãªç¹ã¯åœæã®ã·ã§ã«ã¹ã¯ãªããã«ãããã°ã©ãã³ã°èšèªãšããŠäœ¿ããããšãæ±ããããŠãããšããããšã§ãããã¡ãããã®æ¬¡ã®ã·ã§ã«ã§ãã Bourne ã·ã§ã«ã«ãããã°ã©ãã³ã°èšèªãšããŠã®èœåãæ±ããããŸããã
äžè¬çã«ãœãããŠã§ã¢ãšããã®ã¯äºææ§ãä¿ã£ãŠããŒãžã§ã³ã¢ããããããšãéžã³ãŸããããã Bourne ã·ã§ã«ã§ã¯äºææ§ãåãæšãŠãŠæ°ããåèšèšãããŠããŸãããã㯠Thompson ã·ã§ã«ã®èšèšã§ã¯æ±ããããŠããããã°ã©ãã³ã°èšèªãšããŠã®èœåãçµã¿èŸŒãã®ãäžå¯èœã§ããããšã PWB ã·ã§ã«ã«ãã£ãŠæããã«ãªã£ãŠããããã§ãããã®ãã Bourne ã·ã§ã«ã¯äºææ§ãåãæšãŠãŠæ°ãã«èšèšã»éçºãè¡ããŸããããããã£ãŠçãŸããã·ã§ã«ã¹ã¯ãªãããããã°ã©ãã³ã°èšèªã«ãªããªãããããããŸãããä»ã«ãã·ã§ã«éçºè ã®ããã¯ã°ã©ã³ããèšèšææ³ãç¥ãããšã§ããã°ã©ãã³ã°èšèªãšããŠéçºãããããšãã¯ã£ãããšåããã®ã§ããããããã¯ã·ã§ã«ã®æŽå²ã远ããªãã確èªããŠãããããšæããŸãã
幎衚
Unixãããã°ã©ãã³ã°èšèªãã·ã§ã«é¢é£ã®æŽå²ããŸãšããŠã¿ãŸãããBourne ã·ã§ã«ã¯ Unix ãšãšãã«åºè·ãããŠããã·ã§ã«èªäœã«ããŒãžã§ã³çªå·ããªããã SVR2 (System V Release 2) ã®ããã« Unix ã®ããŒãžã§ã³ã䜵èšããŠããŸããå®éã«ã¯ Bourne ã·ã§ã« 㯠Unix ãã³ããŒã«ãã£ãŠä¿®æ£ãå ããããŠåºè·ãããŠããããã«æ©èœãç°ãªã现ããäºçš®ã倿°ãããŸãããŸã AT&T ã®æã«ãããã®ããŸãã¯é¢ãã£ãŠãããã®ã«ã¯åŸãã«@ãã€ããŠããŸãïŒat ããŒã¯ã ãã«ïŒãããããŠã¿ããš AT&T ã®å瞟ã¯å倧ã§ããããã ã AT&T æå±ã®éçºè ã®å瞟ã¯èªããŠããŠã AT&T ãšããäŒç€ŸãšããŠã¯ããŸãè¯ãæãããŠããªãã£ãããã§ããïŒãUnix èå€åŠãåç §ïŒ
- Unix ç»å Žä»¥å
- 1954幎 FORTRANã1958幎 ALGOL, LISPã1959幎 COBOLã1964幎 PL/I, BASIC
- 1960幎 ALGOL60ïŒæ§é åããã°ã©ãã³ã°èšèªãã»ãŒãã¹ãŠã®èšèªã®ç¥å ïŒ
- 1967幎 Simula ïŒåã®ãªããžã§ã¯ãæåèšèªïŒ
- 1968幎 ãã€ã¯ã¹ãã©ãGo To Statement Considered Harmfulã
- GOTOææå®³èª¬ïŒæ¬äººãåžæããã¿ã€ãã«ãGOTO æã䜿ãã¹ãã§ãªãã±ãŒã¹ãïŒ
- 1969幎 Multics@ïŒãã«ãã¿ã¹ã¯ OSïŒ
- 1969幎 Unix èªç@ ïŒåœæã¯ã·ã³ã°ã«ã¿ã¹ã¯ OSããœãŒã¹ã³ãŒãã¯å
¬éãããŠããïŒ
- ã¢ã»ã³ãã©ã§èšè¿°ãPDP-7ïŒã¡ã¢ãª 16KBïŒã§åäœ
- 1971幎 Thompson ã·ã§ã«@ ïŒãã€ãããªãã€ã¬ã¯ãããïŒãUnix Version 1@
- 1972幎 C èšèªèªç@ãSmalltalkãUnix Version 2@
- 1973幎
ed@,tr@,grep@ãUnix Version 3@ãUnix Version 4@ (C èšèªïŒ - 1974幎
sed@ãUnix Version 5@ïŒãã«ãã¿ã¹ã¯ OS ã«ãªãïŒ- ã¯ããŒã¹ãStructured Programming with Goto Statementsã
- GOTO æã«ããæ§é åããã°ã©ãã³ã°ïŒGOTOææå®³èª¬ã®çµçïŒ
- ã¯ããŒã¹ãStructured Programming with Goto Statementsã
- 1975幎 PWB ã·ã§ã«@ãUnix Version 6@
- 1976幎
vi - 1977幎 PWB/UNIX@
- 1978幎 C ã·ã§ã« (csh)
- 1979幎 Bourne ã·ã§ã« [Version 7]@ïŒãœãŒã¹ã³ãŒã ALGOL68 颚 C èšèªïŒã
awk@ - 1981幎 Bourne ã·ã§ã« [System III]@ãtcsh
- Unix ãã¯ããŒãºããœãŒã¹ã«ãªã
- 1983幎 Bourne ã·ã§ã« [SVR1]@ãKorn Shell (ksh)@ïŒããããçºè¡šã®ã¿ïŒãC++
- GNU ãããžã§ã¯ãçºè¡š
- 1984幎 Bourne ã·ã§ã« [SVR2]@ïŒALGOL68 颚ããã®è±åŽã颿°å®çŸ©ãå¯èœã«ãªãïŒ
- 1986幎 Bourne ã·ã§ã« [SVR3]@ïŒé¢æ°ã§ååž°åŒã³åºãã§ããããã«ãªãïŒãksh86@ ïŒãœãŒã¹ã³ãŒãå ¬éïŒïŒ
- 1987幎 Perlãpdksh
- 1988幎 ksh88@ïŒã¯ããŒãºããœãŒã¹ïŒ
- POSIX æšæºå (POSIX.1 Core Services) (IEEE Std 1003.1-1988)
- 1989幎 Bourne ã·ã§ã« [SVR4.0]@ïŒãžã§ãã³ã³ãããŒã«è¿œå ïŒãGNU bashãash
- NeXTSTEP ç»å Ž (Darwin ã®å身ïŒ
- 1990幎 zsh
- 1991幎 Linux èªçãPython
- 1992幎 Bourne ã·ã§ã« [SVR4.2]@ïŒãœãŒã¹ã³ãŒã Heirloom ãããžã§ã¯ãçïŒ
- POSIX ã·ã§ã«æšæºå (POSIX.2 Shell and Utilities) (IEEE Std 1003.2-1992)
- GNU ã³ã³ããŒãã³ã宿ïŒGNU Hurd ã«ãŒãã«ä»¥å€ïŒãåã® Linux ãã£ã¹ããªç»å Ž
- 1993幎 ksh93@ (ã¯ããŒãºããœãŒã¹ã2005幎㮠93q ãããªãŒãã³ãœãŒã¹ïŒ
åè
- https://unix.stackexchange.com/questions/145522/what-does-it-mean-to-be-sh-compatible
- https://en.wikipedia.org/wiki/History_of_Unix
Thompson ã·ã§ã«
Unix ã®æåã®ããŒãžã§ã³ã«æèŒãããã·ã§ã«ïŒã³ãã³ãã€ã³ã¿ããªã¿ïŒã§ã±ã³ã»ãã³ããœã³ã«ãã£ãŠéçºãããŸãããBourne ã·ã§ã«ãšã®äºææ§ã¯ãããŸãããã¹ã¯ãªããã¯åã«å€éšã³ãã³ããçŸ åããã ãã®ãã®ã§ã·ã§ã«èªäœã«å¶åŸ¡ãããŒåœä»€ããªããããããã°ã©ãã³ã°èšèªãšããŠã¯ããªãåäžè¶³ã§ããäž»ãªç¹åŸŽã¯ä»¥äžã®ãšããã§ãã
ããã¥ã¢ã«ïŒhttps://www.in-ulm.de/~mascheck/bourne/v6/
- ã¹ã¯ãªããã¯æšæºå ¥åããå ¥åãã
- ã·ã§ã«ã¹ã¯ãªããã§ãã£ã«ã¿ãæžããªã
- å¶åŸ¡ãããŒã倿°ããªã
-
ifãå€éšã³ãã³ã- äŸ
if -r /path/to/file echo /path/to/file is readable
- äŸ
-
gotoãå€éšã³ãã³ã - glob ãå€éšã³ãã³ã
/etc/glob - ãã€ãããªãã€ã¬ã¯ãã¯ãã®é ãããã
ãã·ã§ã«ã¹ã¯ãªããã§ãã£ã«ã¿ãæžããªãããšããã®ãå°ããã³ãšããŸããã§ããããèŠããã« sh < script èšã圢ã§ã·ã§ã«ãã¹ã¯ãªããã®å
¥åã®ããã«æšæºå
¥åã䜿ã£ãŠããŸãã®ã§ãä»ã®å
¥åãåãå
¥ããæ¹æ³ããªãããã®ããã§ãã
ãŸãã·ã§ã«èªäœã«å¶åŸ¡ãããŒåœä»€ãæã£ãŠããã if ã goto ãè¡ãããå Žåã¯å€éšã³ãã³ãã® if ã³ãã³ãã goto ã³ãã³ããåŒã³åºããŠå®çŸãããšã®ããšã§ããif ã¯ãšããã goto ãšããã®ã¯æ¬¡ã«å®è¡ããè¡ãæå®ããã©ãã«ã®äœçœ®ãŸã§ãžã£ã³ãããªããšãããªãããã§ãæåã«ãããç¥ã£ãæ ããïŒïŒå€éšã³ãã³ãã§ goto ãïŒïŒããšæã£ãã®ã§ãããã¹ã¯ãªãããæšæºå
¥åããå
¥åãããšããäºãšãgoto ã³ãã³ãã§ãã¡ã€ã«ãã€ã³ã¿ãç§»åãã (called an external goto to move the filepointer)ããšããã®ãèŠãŠãåºæ¥ããã£ïŒããšæ°ã¥ããŸããã
ã€ãŸãå®è¡ããã¹ã¯ãªãããæšæºå
¥åã§æž¡ããŠããããã§ãããããã®æšæºå
¥åã®å
容ã goto ã³ãã³ãåŽã§æ¶è²»ãããŠããã°ããã®ã§ããã·ã§ã«ã¹ã¯ãªããã§åæ§ã®åŠçãå®è£
ããŠã¿ãŸããã
äŸãã°æ¬¡ã®ãããªã¹ã¯ãªãããã¡ã€ã«ããã£ãæ
echo "cmd 1"
echo "cmd 2"
goto LABEL2
: LABEL1
echo "cmd 3"
: LABEL2
echo "cmd 4"
次ã®ãããªã·ã§ã«ã¹ã¯ãªããïŒThompson ã·ã§ã« çžåœïŒãš goto ã³ãã³ãçžåœãæžãã ãã§åãåããåçŸããããšãåºæ¥ãŸããã
# !/bin/sh
PATH="$PATH:."
while IFS= read -r line; do
eval "$line"
done
# !/bin/sh
while read -r cmd label; do
[ "$cmd $label" = ": $1" ] && break
done
$ ./thompson.sh < script
cmd 1
cmd 2
cmd 4
ããŸãããšèããŠãŸããããã ããã®ããæ¹ã§ã¯ã¹ã¯ãªããã®åŠçã¯åããåŸãžã®äžæ¹éè¡ããè¡ãªããŸãããã€ãŸã 2021-07-24 ãã€ãããå
¥åããå ŽåãšåéãããŠããããèšæ£ ïŒãã€ãããã®å
¥åã§ã¯ãªãïŒãã¡ã€ã«ããªãã€ã¬ã¯ãã䜿ã£ãŠæšæºå
¥åã«äžããå Žåã¯ãã¡ã€ã«ã¯ã·ãŒã¯å¯èœã§ããã€ãŸããã® goto ã§åã®è¡ã«æ»ã£ããã«ãŒããå®è£
ããããšãåºæ¥ãªããšããããšã§ããæåãããã®ãããªäœ¿ãæ¹ãæ³å®ããŠããªãã£ããšããããšãã¯ã£ããããããŸããscript ã¯ã·ãŒã¯å¯èœã§ããããå®è¡è¡ãå·»ãæ»ãããšãå¯èœã§ããPOSIX ã·ã§ã«ã§ã¯ãã¡ã€ã«ã®ã·ãŒã¯æ©èœããªãã®ã§ããããã§ãã ksh ã¹ã¯ãªããã§å·»ãæ»ãå¯èœãª goto ãå®è£
ããŠã¿ãŸããã
# !/usr/bin/env ksh
<#((0) # ãã¡ã€ã«ã®å
é ã«ã·ãŒã¯
while read -r cmd label; do
[ "$cmd $label" = ": $1" ] && break
done
: loop
date
sleep 1
goto loop
ã¡ãªã¿ã« : ã§å§ãŸãã©ãã«ããã©ãã«ããšããŠè§£éããã®ã¯ goto ã³ãã³ãåŽã§ããããšã«æ³šæããŠäžãããThompson ã·ã§ã«ããèŠããš : ã¯ã©ãã«ã§ã¯ãªãåã«äœãããªãã³ãã³ãã§ã³ã¡ã³ããæžããšãã«ã䜿ãããŠããããã§ãïŒåœæã¯ # ããªãïŒãããã¯çŸåšã®ã·ã§ã«ã«ããã : ã³ãã³ãã®ã«ãŒãã§ãããã
ãšããã§ Thompson ã·ã§ã« ãš goto ã³ãã³ãã¯ã©ã¡ããå
ã«çãŸããã®ã§ããããïŒ Thompson ã·ã§ã«ãäœã£ãåŸã« goto ãå®çŸã§ããããšã«æ°ã¥ããŠã³ãã³ããäœã£ãã®ãããããšã goto ãå®çŸããããã« Thompson ã·ã§ã«ã®ã¹ã¯ãªãããæšæºå
¥åããå
¥åããããã«ããã®ããããŒãžã®é çªã¯ããããããŸããã
2021-07-24 è¿œèš âã¯ããããåæã«èãåºããããã®ã ãšæããŸãã2021-07-08 ã«å
¬éããã oil ã·ã§ã«ã®ããã°èšäºçµç±ã§ Thompson ã·ã§ã«ã®æåã®è«æãããããšãç¥ããŸãããããã«ãããšã·ã§ã«ãã³ãã³ããšããŠäœ¿ãããšã§ãã¹ã¯ãªãããå®è¡ã§ãããšãã goto ã䜿ã£ãäŸã玹ä»ãããŠããŸããïŒãã®äŸã«ãã goto ãå·»ãæ»ãå¯èœã§ããããšã«æ°ã¥ãããããèšäºãèšæ£ã»å çããŸãããïŒ
PWB ã·ã§ã« (Mashey ã·ã§ã«)
PWB 㯠Programmer's Workbench ã®ç¥ã§ããã°ã©ãã®ããã®éçºããŒã«çŸ€ã»ã»ã»ã§ããã®ããªïŒã¡ãããšããã£ãŠãªãæ°ãããŸãããAT&T ãããã°ã©ããŒåãã«ã«ã¹ã¿ãã€ãºãã Unix ã§ãã PWB/UNIX ãšããã®ããã£ãŠãPWB ã·ã§ã« (Mashey ã·ã§ã«) ã¯ãã® OS ã§æ¡çšãããã·ã§ã«ã®ããã§ããããã Bourne ã·ã§ã«ãšã®äºææ§ã¯ãããŸãããéçºè ã®ååã¯ãžã§ã³ã»ãã·ã§ã€ã§ãã
ãUsing a Command Language as a High-Level Programming Languageããšããè«æã®ã¿ã€ãã«ãããæãããªããã«ã·ã§ã«ãããã°ã©ãã³ã°èšèªãšããŠäœ¿ããããéçºãããã®ã§ãã Thompson ã·ã§ã«ãšäºææ§ãããããããšãç®çãšããŠããããå€§å¹ ãªæ¹è¯ã¯ã§ããŸããã§ããããããåŸã®ã·ã§ã«ã«åœ±é¿ãäžãããããªä»æ§ãã¢ã€ãã¢ãçãŸããŸãããå¶åŸ¡ãããŒåœä»€ãã·ã§ã«ã«çµã¿èŸŒãŸããããäžå¿ã¯æç¶ãåããã°ã©ãã³ã°èšèªãšèšãããšæããŸããã倿°åã 1 æåãªã©å¶éã倧ããããã©ã¡ãããšèšãã°ããã°ã©ãã³ã°èšèªã«ããã®ã詊ã¿ãèšèªãšããæ±ããè¯ãããã§ãã
PWB ã·ã§ã«ã®ç¹åŸŽã¯ä»¥äžã®ãšããã§ãã
ããã¥ã¢ã«ïŒhttps://www.in-ulm.de/~mascheck/bourne/PWB/
- ã¹ã¯ãªãããæšæºå
¥åããã ãã§ã¯ãªããã¡ã€ã«ãšããŠèªã¿èŸŒããããã«ãªã£ãïŒ
sh <FILE> [ARGS]ïŒ - ãã£ã«ã¿ãšããŠäœ¿ããããã«ãªã£ã
- 倿°ãå°å ¥ãããïŒãã ã倿°åã« 1 æåãã䜿ããªãäžã«äžéšã¯ç¹å¥ãªæå³ã«å²ãåœãŠãããïŒ
-
HOMEãPATHã«çžåœããç¹æ®å€æ°ãšããã¢ã€ãã¢ãçãŸããïŒãã®æç¹ã® UNIX ã«ç°å¢å€æ°ã¯ãããŸããïŒ - 倿°ãåç
§ããããã®
$ïŒãšããã«ã¯ã©ãŒãå ã§ã®å±éïŒãçãŸãã- ïŒå€ãã®èšèªã§äœ¿ããã
$ã®èµ·æºã¯ããã«ããããã§ãïŒ
- ïŒå€ãã®èšèªã§äœ¿ããã
- ããã»ã¹çªå·ãååŸããããã®
$$ã远å- ïŒåœæã®æãå€ããŠãŒã¹ã±ãŒã¹ã¯äžæãã¡ã€ã«ããŠããŒã¯ãªååã«ãããããããïŒ
-
if-then-else-endifãswitch-ã©ãã«-endswãç»å Žãã - ã·ã§ã«ã¹ã¯ãªãããžã®åŒæ°ïŒ
$1,$2, ...ïŒãç»å ŽãshiftãçãŸãã -
gotoãã·ã§ã«ã«çµã¿èŸŒãŸãã -
expr $a + 1 | = aãšããæžãæ¹ã§æšæºåºåã倿°ïŒaïŒã«ä»£å ¥ã§ãã -
#ã«ããã³ã¡ã³ãã¯ãŸã ãªã - ãã©ã¡ãŒã¿çœ®æ ${-=?+} ã䜿ããããã«ãªã£ã
äœè«ã§ãããææ³ãèŠãŠã㊠Windows (MS-DOS) ã®ããããã¡ã€ã«ã䌌ãŠãããšæããŸãããããããã¡ã€ã«ïŒãå®è¡ãã command.comïŒã¯ MS-DOS ã®å身ãšãèšãããŠãã QDOS ã®é ãã€ãŸã 1980 幎é ã«äœãããããã§ããMS-DOS 㯠CP/M ãåèã«ããŠäœããããšãèšãããŠãã®ã§ CP/M ã«èµ·æºãããã®ããšæããŸããã CP/M ã®ã·ã§ã«ã«çžåœãã CCP (Console Command Processor) ã«ã¯ããããã¡ã€ã«ã®ãããªäžé£ã®ã³ãã³ãããã¡ã€ã«ã«ããŠå®è¡ããæ©èœãæ¢ããããŸããã§ãããPWB ã·ã§ã«ã 1975幎ãBourne ã·ã§ã«ã 1979幎ãšããããšãèãããš Bourne ã·ã§ã« ãåèã«ããã«ã¯éã«åãã PWB ã·ã§ã« ãåèã«ããã®ãããããŸããã
C ã·ã§ã«
Bourne ã·ã§ã«ãšåææã«äœãããã·ã§ã«ã§ããã«ãªãã©ã«ãã¢å€§åŠããŒã¯ã¬ãŒæ ¡ã®å€§åŠé¢çã ã£ããã«ã»ãžã§ã€ãéçºããŸãããæ§æã¯ C èšèªã«è¿ãïŒãšããã»ã©äŒŒãŠãŸããïŒã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠã®äœ¿ãåæã¯ Bourne ã·ã§ã«ãããåªããŠããŸããããããã·ã§ã«ã¹ã¯ãªãããšããŠã¯æžãã¥ãããšèšãããŠããŸããããã§ãäžå®ã®æ¯æãåŸãŠããæ¹è¯çã® tcsh ã¯çŸåšãã¡ã³ããã³ã¹ãè¡ãããŠããŸãã
C ã·ã§ã«ã®ææ³ã®åºæ¬ã ããèŠãã°ãããªã«æªããšããã¯ãªãããã«èŠããã®ã§ãããå®éã¯åºæ¬çãªéšåã§ããããåé¡ããããç§ãèªäœã®ããŒã«ã tcsh ã«ã察å¿ãããããšå°ãã ã䜿ã£ãã®ã§ãã颿°ãªãã£ãã倿°ã«æ¹è¡ã ãã¯ã©ãŒãã ããå ¥ããããšãé£ããïŒã§ããªãïŒïŒãã°ã«è¿ã仿§ãå€ããŠæå¿µããããšããããŸãããšãã£ãŠãæ¹å€ã§ããã»ã©è©³ãããªãã®ã§æåãªããã¥ã¡ã³ããæå®³ãª csh ããã°ã©ãã³ã°ããšãwikipedia ã® C ã·ã§ã«ã®æ¹å€ãã玹ä»ããŠçµãããŸãã
Bourne ã·ã§ã«
ããŠãã®èšäºã®æ¬åœãã¹ãã£ãŒãã³ã»ããŒã³ãéçºãã Bourne ã·ã§ã«ã®è©±ã§ããçµè«ãèšããš Bourne ã·ã§ã«ã®èšèªã¯æç¶ãåïŒæ§é åïŒããã°ã©ãã³ã°èšèªã§ããBourne ã·ã§ã«ã¯ Thompson ã·ã§ã«ãš PWB ã·ã§ã«ãæèãã€ã€ãäºææ§ãä¿ã€ããšã¯ç®æšãšããäžããèšèšãããŸããã
ALGOL ãšããèšèªããåç¥ã§ããããïŒåããŠæ§é åããã°ã©ãã³ã°ãå®çŸããèšèªã§ C èšèªãå«ãã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã¯ ALGOL ã®åœ±é¿ãåããŠãããšèšãããŠããŸããBourne ã·ã§ã«ã®ã«ãŒãã« Thompson ã·ã§ã« ãš PWB ã·ã§ã«ãããã®ã¯åœç¶ã®ããšãšã㊠ALGOL68 ãã«ãŒããšèšã£ãŠããã®ã§ã¯ãªãããšæããŸãããªãããèšããã®ããšèšããšéçºè ã®ã¹ãã£ãŒãã³ã»ããŒã³ã¯ ALGOL 68CïŒALGOL 68çšã®ã³ã³ãã€ã©ïŒã®éçºã«é¢ãã£ãŠãã人ç©ã§ Bourne ã·ã§ã«ã®ææ³ã«ããã®åœ±é¿ãçŸããŠããããã§ãã
äŸãã° if ã®çµããã® fiãcase ã®çµããã® esac ãšããã¹ãã«ãéã«ããåèªã¯ ALGOL ãçºç¥¥ã§ãïŒdo ã®çµããã od ã§ãªãã®ã¯ od ã³ãã³ãããã£ããããšãã説ãæåã£ãœãã§ã POSIX ã®ããã¥ã¡ã³ãã«æžããŠãããŸãããbecause od is already the name of a standard utility.ïŒããŸãæ¹å€ã®å¯Ÿè±¡ã«ããªã£ãŠããŸãããåæã® Bourne ã·ã§ã«ã®ã³ãŒã㯠C èšèªã§ãããªãã ALGOL68 颚 ã«èšè¿°ã§ããããã«ãã¯ããå€çšãããŠããŸãããALGOL ã¯å¶åŸ¡æ§é ãèªåšã«ãã¹ãã«ã§ããåã®èšèªã§ãã Bourne ã·ã§ã« ãåãããã«ãã¹ãããããšãã§ããŸãã
Bourne ã·ã§ã«ã¯é¢æ°ã«ããæœè±¡åïŒäžé£ã®ã³ãŒãã«é©åãªååãã€ããŠããããããããäºïŒãè¡ããé æ¬¡ã»å埩ïŒwhile, forïŒã»åå²ïŒif, caseïŒãã·ã§ã«ã«çµã¿èŸŒãŸããŠãã goto æããªããããæ§é åããã°ã©ãã³ã°ãæ§é åå®çãæèããŠããããšã«ééããªãã§ããããïŒã¡ãªã¿ã« C èšèªã«ã¯é¢æ°å
ã«ãããžã£ã³ãã§ããªãå¶éã«ãã£ãŠä¹±çšãæããããŠãããã®ã® goto æããããŸããïŒ
ä»ãšãªã£ãŠã¯åºæ¬ã®èšèªä»æ§ã«æããã§ããããåœæã¯ goto ææå®³èª¬ã®çã£åªäžã§ããéå»ã®ã·ã§ã«ãšã®äºææ§ãåãæšãŠãALGOL68 ãšæ·±ãé¢ä¿ãããã¹ãã£ãŒãã³ã»ããŒã³ãèšèšããæ§é åããã°ã©ãã³ã°èšèªãæ§é åå®çãåãå
¥ããããŠãã Bourne ã·ã§ã«ã®èšèªãããã°ã©ãã³ã°èšèªã§ãªãããããããŸããã
The A-Z of Programming Languages: Bourne shell, or sh
ã¹ãã£ãŒãã³ã»ããŒã³ãã©ã®ãããªèããèšèšæ¹éã§ Bourne ã·ã§ã«ãéçºããã㯠The A-Z of Programming Languages: Bourne shell, or sh ïŒããšããšã¯ 2009 幎㮠computerworld.com.au ã®ã€ã³ã¿ãã¥ãŒïŒã§è©³ããèªãããŠããããã®è©±ããã Bourne ã·ã§ã«ãããã°ã©ãã³ã°èšèªãšããŠèšèšããŠããããšãããããŸãããã®ã€ã³ã¿ãã¥ãŒèšäºã¯çµ¶å¯Ÿã«èªãã¹ãã ãšæããŸã ïŒãªãç§ã¯ãããä»ãŸã§ç¥ããªãã£ãã®ãïŒïŒæåã¯ãã®èšäºã«è©³çްã«ã³ã¡ã³ããããããšæã£ãŠããã®ã§ãããé·ããªããããã®ã§ã·ã§ã«ã¹ã¯ãªããã«é¢ãããã€ã³ãã ã玹ä»ããŸãããšãã«æåŸã®æªæ¥ã®ææãªããã°ã©ããŒã«å¯ŸããŠã®ã¢ããã€ã¹ã¯ãšãŠãããã«ãªãã®ã§ã€ã³ã¿ãã¥ãŒèšäºããã²èªãã§äžããã
- Bourne ã·ã§ã«ãäœæãããã£ããã¯ãªãªãžãã«ã®ã·ã§ã«ãçã®èšèªã§ã¯ãªãã£ããã
- ããã°ã©ããã«ãªã¹ã¯ãªããèšèª ã〠ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã®äž¡æ¹ã§äœ¿ããããã«èšèšãã
- C èšèªã®é¢æ°åŒã³åºãã®
()ã¯å ¥åãèŠçã§ãããããåŒæ°ãã¹ããŒã¹åºåããšãã¯ã©ãŒããäžèŠãªå Žåã¯çç¥ã§ããææ³ãšãã - ç°å¢å€æ°ã¯ä»¥åãã Unix ã«æèŒãããŠããæ©èœã§ã¯ãªããã·ã§ã«ã¹ã¯ãªããã®ããã«å°å ¥ããæ°æ©èœ
ifãforãªã©ã®å¶åŸ¡ãããŒåœä»€ãæ¯æãgotoã¯æå³çã«åé€ãã-
颿°ã¯æåŸã«è¿œå ããããæåãã远å ããŠãããã¹ãæ©èœã ã£ã
- 2021-08-15 è¿œèš "ksh - An Extensible High Level Language ã«ãããš ksh ã®æ¹ããããã«æ©ãå®è£ ããŠããããã§ãã
- ïŒå€éšïŒã³ãã³ããšé¢æ°ã¯æœè±¡çãªã¬ãã«ã§ã¯åäžã®ãã®ã§ãã
- ããã©ãŒãã³ã¹åé¡ã®å€ãã¯å€éšã³ãã³ãã®å®è¡ã«ãããã®ã§ã颿°ã¯ããã解決ããããã®ãã®
- Bourne ã·ã§ã«ã®åœåã®èšèšã«ããããã以äžã®æ©èœè¿œå ã¯è€éã«ãªããšå€æã远å ããããšãæ¢ãã
- Bourne ã·ã§ã«ã®ã³ã³ãã€ã©ãäœæããããšããŠãããã誰ãããã©ãŒãã³ã¹ã«äžæºããªãã£ããããããªãã£ã
- ALGOL ã®ãããªæ§æãæ¡çšããã®ã¯
{}ã®å¯Ÿå¿ãåããã¥ãããã -
if ... then ... fiãwhile ... do ... doneã®...ã®éšåãä¿®æ£ãªãã«åå©çšã§ããããã«èšèšããïŒãšããæå³ïŒïŒ - PowerShell ã®ã¢ãããŒãã¯ãUnix ç°å¢ã«ã¯ããªããžã§ã¯ããããªããããUnix ã·ã§ã«ã«æå¹ãªã®ãã®ãªããã¯äžæ
- bash 㯠Bourne ã·ã§ã«ãšå³å¯ãªäºææ§ãæã£ããªãŒãã³ãœãŒã¹å®è£
ã ãšèããŠãã
- ïŒç§ã®æèŠã§ã¯ bash 㯠Bourne ã·ã§ã« ãããåœæã¯ããŒãºãã ã£ã ksh ãåèãšããŠããããã«æããŸãïŒ
- ã·ã§ã«ã¹ã¯ãªããã¯ã³ãŒããåããã¥ããé
ããšããæèŠãããããããã«è³æããŸããïŒãšãã質åã«å¯Ÿã
- ã·ã§ã«ã¹ã¯ãªããã®æ¹ãç°¡åã«èªã¿ã¥ããã³ãŒãã«ãªããããããªãããã©ããªèšèªã§ãèªã¿ã¥ããã³ãŒããæžããããšã¯ã§ãã
- ã·ã§ã«ã¯æåååŠçèšèªã§ãæåååŠçã¯ã·ã³ãã«ã§ããããå¹ççã«å®è¡ã§ããªãããããªã
- ïŒç§ã®æèŠã§ã¯ããã¯æååãè±æã®ãããªè€æ°ã®ã¹ããŒã¹åºåãã§åèªåäœã§åŠçããåæã®è©±ã§ãæååäœã§ã®å å·¥ãè¡ãå Žåã¯éå¹çã§ããåŸç¶ã®ã·ã§ã«ã§ã¯ãã©ã¡ãŒã¿å±éã«ããæ¹åãããŸããïŒ
- ã³ãã³ããã¡ã€ã«ã¯å®è¡åã«åŠçæžã¿ã§ãããä»ã®ã€ã³ã¿ããªã¿åèšèªãšåçšåºŠã®å¹ç
- ãã ãããŸãåŠçãè¡ããªãå€éšã³ãã³ãã倿°å®è¡ããå Žåã¯
forkãšexecã«ãã£ãŠéå¹ççïŒé ãïŒ
- ã·ã§ã«ã¯ããããã©ããªã£ãŠããã®ãïŒãšãã質åã«å¯ŸããŠ
-
ã·ã§ã«ã¯ Unix ç°å¢ãžã®ã€ã³ã¿ãŒãã§ãŒã¹
- ïŒUnix ãã³ãã³ããè©°ãŸã£ãå·¥å ·ç®±ãšèããã°ãã£ããæ¥ããšæããŸãïŒ
- ãŠã§ããšããç°å¢ãçãŸãããã PHP ãªã©ã®èšèªãç»å Žãã
- æ°ããç°å¢ãç»å Žããã°ããã«é©ããèšèªãç»å Žããã ãã
-
ã·ã§ã«ã¯ Unix ç°å¢ãžã®ã€ã³ã¿ãŒãã§ãŒã¹
- èªåã§ Bourne ã·ã§ã« ãšåä»ããã®ã§ã¯ãªããåæã«èª°ããèšãã ãã
- ïŒããã°ã©ãã³ã°èšèªäžè¬ã®è©±ãšããŠïŒèšèªèªäœãšåããããã©ã€ãã©ãªã»ãããéèŠ
- èªåã®ã³ãŒãã«è²¬ä»»ãæã¡ã培åºçã«ãã¹ãããå®éã®åäœç°å¢ãè¯ãç¥ãããŠãŒã¶ãŒãäœããããã®ããçè§£ããããšãéèŠ
ãã®ä»ã®æ å ±
-
BSDCan 2015 The Technical BSD Conference
- sh as a language: Typeless / Strings are first class and only citizens
- Shell Design and implementation: ALGOL 68 concepts
- C èšèª vs ã·ã§ã«ã¹ã¯ãªãã: C èšèªã®
ifã ãšå èªã¿ãå¿ èŠã«ãªã£ãŠã€ã³ã¿ã©ã¯ãã£ãã«ã¯é©ããªãïŒïŒïŒ - ä» ã·ã§ã«ã¹ã¯ãªããã®ææ³ãããããçç± ïŒãšãããŸããã£ããèŠãŠãŸããïŒ
ãªãã®èªé²ïŒ
äœè«ã§ããæ¥æ¬èªã® Bourne ã·ã§ã«ã® wikipediaã«æ¬¡ã®ãããªãèªé²ããæžãããŠããŸããã
誰ã Bourne shell ã®ææ³ãã©ããªã£ãŠããããæ¬åœã«ã¯ç¥ããªãããœãŒã¹ã³ãŒãã調ã¹ãŠã¿ãŠãã»ãšãã©åœ¹ã«ç«ããªããââTom Duff
ãªãã®èª¬æããªããããªãç»å ŽããŠããã®ã§ãã©ããããããåºãŠããã®ãæ°ã«ãªã£ãŠè±èªããŒãžã調ã¹ãæãçŸåšã¯åé€ãããŠããŸãããå±¥æŽãèŠããš Linux JOURNAL ã® What's GNU: BashâThe GNU Shell (1994 幎ïŒã®èšäºãå ãã¿ã®ããã§ãããã®èšäºã§åŒçšãããŠãã Tom Duff ã®èšèã ããæãåºããŠããããã§ãããã®èšäºãæžãã Chet Ramey 㯠bash éçºè ã®äžäººã§ Tom Duff 㯠Plan 9 ã® rc ã·ã§ã«ã®éçºè ã§ããèšäºãèªãéããã®èšè㯠Bourne ã·ã§ã« ã®è«æã®ææ³ã现ããå®è£ ïŒã®ãã°ïŒïŒãšå®å šãªäºææ§ã bash ã§å®çŸããã®ãé£ãããšãã話ã®äžã§åŒçšãããèšèã®ããã§ããPOSIX ã·ã§ã«ã«é¢ããŠã¯ POSIX.2 ã§ææ³ãå®çŸ©ãããŠããããããã®è©±ã¯åœãŠã¯ãŸããªãã§ããããçŸåšã®ã·ã§ã«ã¹ã¯ãªããã®ææ³ãæªããšèšã£ãŠãã®ãšåéããããšããã§ããã
KornShell
Bourne ã·ã§ã« 㯠Unix ã®ã·ã¹ãã ã·ã§ã«ãšããŠåºã䜿ãããããšã«ãªããŸããããAT&T ã§ã¯ããã«ããã·ã§ã«ãæ±ããããŠãã Bourne ã·ã§ã« ã®å®å šãªäžäœäºæã®ã·ã§ã«ã§ãã KornShell ãããããã»ã³ãŒã³ã«ãã£ãŠéçºãããŸãããBourne ã·ã§ã«ã¯ C ã·ã§ã«ãæã£ãŠãããããªã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠã®æ©èœïŒãžã§ãã³ã³ãããŒã«ãã³ãã³ãå±¥æŽçïŒã匱ãã£ãã®ã§ãã ksh ã«ã¯ãããã®æ©èœãåãå ¥ããããŠããŸãã
wikipedia ã«ã¯ æåã®ãªãªãŒã¹ã 1983 å¹ŽãšæžãããŠãããŸããããããããã¯çºè¡šã®ã¿ã§ããªã©ã€ãªãŒã®ãLearning the Korn Shellãã«ãããš 1986 幎㫠Experimental Toolchest ãšããŠäžè¬å ¬éãããããã§ããã©ã€ã»ã³ã¹ã¯ããããããŸãããããã®ããŒãžã§ã³ã¯ãœãŒã¹ã³ãŒããå®äŸ¡ã§æäŸããããšæžãããŠããŸãã代衚çãªããŒãžã§ã³ã¯ ksh86ãksh88ãksh93 ã§ããïŒçްããããŒãžã§ã³ã¯ãã¡ããksh86 ã®ãœãŒã¹ã³ãŒããžã®ãªã³ã¯ããããŸããïŒ
ksh86 ã¯ããããéå®çã«ããå ¬éãããŠããããç§ã䜿ã£ãããšããªãã®ã§è©³çްã¯å²æããŸããæåã«åºãæ®åããã®ã¯ 1988 幎ã«ãªãªãŒã¹ããã ksh88 ã§ããæåã«ãªãªãŒã¹ãããŠããäœåãæ©èœè¿œå ã䌎ãããŒãžã§ã³ã¢ãããè¡ãããŠããæçµããŒãžã§ã³ã¯ 88i ã§ãïŒæ«å°Ÿã®ã¢ã«ãã¡ããããå¢ããŠããã¹ã¿ã€ã«ïŒãPOSIX ã§ã¯ ksh88 ãããŒã¹ã« POSIX ã·ã§ã«ãçå®ããŸããïŒPOSIX.2 1992幎ïŒããã ã ksh88 ã®ãã¹ãŠã®æ©èœã POSIX ã·ã§ã«ãšããŠæ¡çšãããã®ã§ã¯ãªããäŸãã°é åã¯æ¡çšãããŸããã§ããã以äžã¯ïŒPOSIX ã«ã¯å«ãŸããªãïŒksh88 ã®æ©èœã®äžéšã§ãã
- é å
-
[[ ]]ïŒãã®æç¹ã§ã¯æ£èŠè¡šçŸå¯Ÿå¿ã¯ãªãïŒ
POSIX ã·ã§ã«ãçå®ãããæ¬¡ã®å¹Žã§ãã 1993 幎㫠ksh93 ããªãªãŒã¹ãããŸãããksh 93 ã§ã¯æŽã«æ©èœè¿œå ãããŠãã POSIX ã·ã§ã«ãè¶ ããããŸããŸãªæ©èœã远å ãããŠããŸãããã®åŸãããã€ãã®æ©èœè¿œå ã䌎ããªãªãŒã¹ãè¡ãããŠãã AT&T ããªãªãŒã¹ããå ¬åŒã®æåŸã®ããŒãžã§ã³ã¯ 2012幎ã«ãªãªãŒã¹ããã 93u+ ã§ããksh88 / ksh93 ã¯ããšããšã¯ã¯ããŒãºããœãŒã¹ã§ããã 2005 幎㮠93q ãããªãŒãã³ãœãŒã¹åããå€ãã®ç°å¢ã«ç§»æ€ãããŠããŸãã以äžã¯è¿œå ãããŠããæ©èœã®äžäŸã§ããïŒè±èªçã® ksh ã® wikipedia ã«ãæ©èœã®äžèЧããŸãšããããŠããŸããïŒ
- 飿³é å
- æµ®åå°æ°ç¹æŒç®
- æ°åŠé¢æ°
- æ£èŠè¡šçŸãµããŒã
- è€å倿°ïŒ
${point.x}ã®ãããªåç §ãã§ãã倿°ïŒ -
/dev/tcp/host/portã/dev/udp/host/portã«ãããããã¯ãŒã¯ã¢ã¯ã»ã¹ - ãªããžã§ã¯ãæåããã°ã©ãã³ã°ïŒãã®èšäºãæžããŠãæã«ç¥ããŸãããç¶æ¿ãã§ããã ãšïŒïŒïŒ
ãããã®æ©èœãããåããéã ksh93 ã§ã¯ããã«ããã°ã©ãã³ã°èšèªãšããŠã®æ©èœã匷åãããŠããŸãã
äœè«ã§ããæ¥æ¬èªçã® wikipedia ã¯ïŒçŸæç¹ã§ïŒããªãæŽæ°ãããŠããããäŸãã°ãksh93ã¯äœè ã§ããã³ãŒã³ãããŸã ã«ä¿å®ããŠããããšæžããŠãããŸãããè±èªçã«ã¯ããããã»ã³ãŒã³ã¯ 2012 幎㫠AT&T ãå»ã£ãŠãã 2014 幎ãŸã§ ksh93v-ïŒããŒã¿ïŒãã©ã³ãã§äœæ¥ãç¶ãããšæžããŠããããïŒããããïŒä»ã¯ã¡ã³ããã³ã¹ãããŠããŸããããã®åŸ ksh93v- ã¯ã³ãã¥ããã£ã«ãã£ãŠåŒãç¶ãã ksh2020 ããªãªãŒã¹ãããŸãããäºææ§ã®åé¡ãçºçã AT&T ã¯ã³ãã¥ããã£ã®ä¿®æ£ãããŒã«ããã¯ããŠæåŸã®å®å®çã§ãã 93u+ ããåå§åããããšã決å®ããŸãããçŸåšã¯ïŒAT&T ã§ã¯ãªãå€éšã®éçºè ã«ãã£ãŠïŒ ksh 93u+m ã§ãã°ã®ä¿®æ£ãã¡ã€ã³ãšããéçºãè¡ãããŠããŸãã
David Korn Tells All
2001 å¹Žã«æ¬å®¶ã® slaskdot ã«æçš¿ãããèšäºã§ãããã¡ãããããããšè峿·±ãããšãæžãããŠããŸããããã€ãæ°ã«ãªã£ããã€ã³ãã玹ä»ããŸãã
- ksh93 ã®ã¹ã¯ãªããæ©èœã¯ä»ã®ã©ã®ã·ã§ã«ãããé«åºŠã§ãã perl/tcl/python ã®ã«ããŽãªã«å±ããŠãããšæã£ãŠãã
- ksh93 ãäž»ã«ãã©ãŒã«ã¹ããŠãã®ã¯ã¹ã¯ãªããã£ã³ã°ã§ããããã®ç¹ã§ã¯ bash ãåé§ããŠãã
- ksh93 ã¯ãã«ãã€ã³ã®è¿œå ãã©ã€ãã©ãªãšããŠäœ¿ãããã® Cèšèª API ãåããã©ã€ãã©ãªãšããŠå®è£ ãããŠããæ¡åŒµæ§ãé«ã
- pdksh 㯠ksh88 ã®ã¯ããŒã³ã§ MKS ã® ksh ãããåªããŠãã
- ïŒäžèšã®éžè©±ã«ã€ãªãã£ãŠããšæãããŸãïŒ
- å°æ¥ã®ãªãªãŒã¹ã§ã¯ãã€ããªããŒã¿ãåŠçããæ©èœãšåå空éã远å ããããšæã£ãŠããã
- ïŒãã¡ã€ã«ã®ã·ãŒã¯ãè€å倿°ãªã©ãããããéšåçã«ã¯å®çŸãããŠãæ°ãããŸããå®å šãªåœ¢ã§ã¯ãªããšæããŸãïŒ
- Unix ã¯åãªã OS ã§ã¯ãªãç©äºãè¡ãããã®ææ®µãã·ã§ã«ã¯ãããæ©èœããããã®æ¥çå€ïŒã°ã«ãŒïŒ
- AST Toolkit ã¯ïŒææ®µãšããŠã® Unix ã匷åããããã«ïŒæ¹è¯ãããããŒã«ãæäŸããã®ãç®ç
- ïŒãããã ast ãªããžããªã®äžã« ksh ãå«ãŸããŠãçç±ãããããŸããïŒ
- GUI ã€ã³ã¿ãŒãã§ãŒã¹ã¯ Unix ã®æ¹æ³è«ã«æµå¯Ÿçã§ãã
- GUI ã¯ã·ã¹ãã ããåé¢ã GUI ã§ã§ããããšã¯ã¹ã¯ãªããã䜿ã£ãŠ GUI ãªãã§ã§ããããã«ããŠããã¹ã
- ïŒç§ããŠã§ããµãŒãã¹ãæ©èœããã©ãŠã¶ã GUI ããã ãã§ãªã CLI ããã¹ãããå®è¡ã§ããããã«èšèšããŠããŸãïŒ
- ksh ã§æºè¶³ããŠãªãæ©èœã»ã³ãŒãã¯ãªãã§ããïŒãšãã質åã«å¯ŸããŠ
- ãã£ãšãåŸæããŠãã®ã¯ã³ãŒããã®ãã®ã§ã¯ãªã Bourne ã·ã§ã«ããåãç¶ãã ã·ã§ã«ã®èšèªä»æ§ã®ãã¹
- ããã¯ã¯ã©ãŒãããªãããŠ
$()ã«ãã - ããã«ã¯ã©ãŒãã§æ¬ãããæå㯠ANSI-C ã®ããã¯ã¹ã©ãã·ã¥èŠåãå šãŠè§£éããã
-
$ã®æ¡åŒµãè¡ããïŒäœããããã®ãããããããŸããã§ããïŒ -
echoã³ãã³ãã¯åŒæ°ã®è§£éãè¡ããªãããã«ãã - åèªåå²ãããã©ã«ãã§ç¡å¹ã«ããïŒzsh ã§ã¯ããã©ã«ãã§ç¡å¹ã§ãïŒ
- ãã ãããããã®å€æŽãããªãã£ããã zsh ãšã¯ç°ãªãå®å
šã«
/bin/shã眮ãæããããšãã§ãã - fc ã³ãã³ãã¯ãã¶ã€ã³ãæªãã£ãïŒç§ã¯äœ¿ã£ãããšããªãã®ã§ããããããŸããïŒ
-
letã³ãã³ãã¯((..))ã«åã£ãŠä»£ããããïŒletã¯ããŸã䜿ããªãã»ããè¯ãããã§ããïŒ - ã·ã§ã«å€æ°ã®å±æ§ã®ãšã¯ã¹ããŒãã¯ããã¹ãã§ã¯ãªãã£ãïŒäžèšã®è£è¶³åç §ïŒ
- ãŠã§ãã®ããã® ksh ããã°ã©ãã³ã°ã«ã€ããŠ
- ãã¢ããã¥ã¡ã³ã㯠CGI ã¹ã¯ãªããã«é©ããŠããããksh93 ã®æ©èœã¯ ksh88 ãããã¯ããã«ãŠã§ãã«é©ããŠãã
- ksh88 ã«ã¯ãCGI ã«æž¡ãããç¡æ°ã®çœ®æãè¡ãããã®æŒç®åããªã
- ksh93 ã®è€å倿°ã¯ããããå¹ççã«è¡ãããšãã§ããã
- kornshell.com ã®ããŒãžã«ã¯CGIã®ãã¹ãŠã®åŒæ°ãã·ã§ã«å€æ°ã«ãããããã¹ã¯ãªããã³ãŒããããïŒã©ãã ããïŒïŒ
- ksh93 ã«ã¯ HTML/XML ã®%xx 圢åŒã§æååå±éãè¡ãã %H ã printf ã«çµã¿èŸŒãŸããŠãã
- ksh ã®ãŠã§ããµã€ã㯠ksh93 ã¹ã¯ãªãããš AT&T nmake ã§ç®¡çãããŠãã
- ksh88 㯠POSIX ã«å®å
šã«æºæ ããŠãããäžéšã®ãã³ããŒã¯ ksh88 ãä¿®æ£ããããšã§å¯Ÿå¿ããŠãã
- ïŒãããããªã®ããksh88 㯠POSIX ã«å®å šã«æºæ ããŠãªããšããæ±ããªã®ãã»ã»ã»ïŒ
- ksh93 㯠æ®ã©ã®éšåã§ Perl5 ã®æ©èœãæã£ãŠããããã©ãŒãã³ã¹ãåçã
- ïŒäœè ã®èãã§ãããèãæ¹ã«ã¯å人差ããããŸãïŒ
- ãã¡ã€ã«ã·ã¹ãã ããã€ãã©ã€ã³ãå€çšããå Žåã¯ã·ã§ã«ã¹ã¯ãªãããé©ããŠããåŸåããã
è£è¶³ ã·ã§ã«å€æ°ã®å±æ§ã®ãšã¯ã¹ããŒãã«ã€ããŠïŒksh ã§ã¯å€æ°ã«æŽæ°åãªã©ã®å±æ§ãã€ããããšãã§ã export ãããšãã«ç¹æ®ãªç°å¢å€æ° A__z ãä»ããŠå ksh ããã»ã¹ã«å±æ§ãç¶æ¿ãããŸããç§ã®æèŠãšããŠã¯ Unix ã®ç°å¢å€æ°ã«ã¯å±æ§ãšããæŠå¿µããªãã®ã§ïŒããããã»ã³ãŒã³ãèšã£ãŠãããã«ïŒããã¹ãã§ã¯ãªãã£ããšæããŸããçŸåšã¡ã³ããã³ã¹äžã® 93u+m ã§ã¯æ°ãã« POSIX ã¢ãŒãïŒset -o posixïŒã远å ãã POSIX ã¢ãŒãã§ã¯å±æ§ã®ãšã¯ã¹ããŒããç¡å¹ã«ãªããŸãããŸã POSIX ã¢ãŒãã«é¢ä¿ãªãã»ãã¥ãªãã£äžã®æžå¿µãã readonly 屿§ã¯å ksh ããã»ã¹ã«ãšã¯ã¹ããŒãã§ããªããªããŸããïŒèŠªããã»ã¹ããä»»æã®èªã¿åãå°çšïŒåæåäžå¯èœãªå€ã®å€æ°ãäžããããšãå¯èœã«ãªãããïŒ
éžè©±
1998 幎 USENIX NT conference ã§ã®ãã©ã¯ã«
ãã€ã¯ããœãããïŒMKS çïŒKornShell ãçµã¿èŸŒã¿ããã UNIX çµ±åããã±ãŒãžããªãªãŒã¹ããŸãã
50 代ã®ç·ãä»ã®ãã£ãšäºææ§ãããã·ã§ã«ãæ€èšããã»ããè¯ãã£ãã®ã§ã¯ïŒã
ãã€ã¯ããœãããããã¯é«ãäºææ§ããã£ãŠæ¢åã®ã·ã§ã«ã¹ã¯ãªããããã®ãŸãŸåãïŒã
50 代ã®ç·ãããã¯æ¬ç©ã® KornShell ã§ã¯ãªã ksh88 ãšã®äºææ§ããªãã»ã»ã»ã
ãã€ã¯ããœããããã®è©±ã¯ééã£ãŠãïŒ æ¬ç©ã® KornShell ãéžãã ïŒã
50 代ã®ç·ãã»ã»ã»ã
å¥ã®äººããã®ç·ã¯ããããã»ã³ãŒã³ã§ãã
ãã€ã¯ããœãããã»ã»ã»ã
泚æ âã®è©±ã¯èšäºãã¡ãŒã«ã®å 容ãåèã«äœãå€ããŠãŸããæ¬åœã®äŒè©±ã®å 容ã¯èšé²ããªãã§ãããã
ãã®ä»ã®æ å ±
Bash (Bourne-again shell)
bash 㯠ksh88 ç»å Žã®æ¬¡ã®å¹Žã§ãã 1989 幎㫠GNU ãããžã§ã¯ãã®ææã®äžã€ãšããŠãã©ã€ã¢ã³ã»ãã©ãã¯ã¹ã«ãã£ãŠéçºãããŸããã1983 幎ã«çºè¡šããã GNU ãããžã§ã¯ãã®ææã®äžã€ã§ Linux ã§ããã©ã«ãã§æ¡çšãããŠããããšããã£ãŠå©çšè
ãå€ãã·ã§ã«ã§ããã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠäœ¿ãããããšãå€ãã§ãããäžéšã®ã·ã¹ãã ã§ã¯ã·ã¹ãã ã·ã§ã«ïŒ/bin/shïŒãšããŠã䜿ãããŠããŸãã
ç§ã Linux ã§ã¯ããã©ã«ãã®ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠäœ¿ã£ãŠããã®ã§ããã·ã§ã«ã¹ã¯ãªãããå®è¡ããã·ã§ã«ãšããŠã¯äžéšã®æ¡åŒµæ©èœã䜿ãçšåºŠã§ bash ã«äŸåããã³ãŒãã¯åºæ¬çã«æžããŠãããå®ã¯ããŸã詳ãããããŸãããåœæã¯ããŒãºã ã£ã ksh ã®ãªãŒãã³ãœãŒã¹å®è£ ãšããèªèã§ bash ã®æ©èœã®å€ã㯠ksh ãç±æ¥ã§ãããšèããŠããŸããæ å ±ãå€ã調ã¹ãã°ããããããããšæãã®ã§è©³çްã«ã€ããŠå²æããŸãã
pdksh ïŒâ mkshïŒ
ksh ãã¯ããŒãºãã ã£ããšãã« ksh ã®ãããªãã¯ãã¡ã€ã³çãšããŠéçºãããã·ã§ã«ã§ããäžäººã®éçºè ã®æã«ãããã®ã§ã¯ãªãè€æ°ã®éçºè ã«åŒãç¶ãããŠããããã§ããïŒloksh ã® CONTRIBUTORS ããïŒ
- ? - 3.2 (1987 - 1989?) - Eric Gisin ïŒCharles Forsyth ã® public domain V7 shell ãããŒã¹ïŒ
- 3.3 ? (date?) - John R MacMillan
- 4.0 - 4.9 (1991/11 - 1994/7) - Simon J. Gerraty
- 5.0 - 5.2 (1994/7 - 1999/7 ?) - Michael Rendell
pdksh 㯠ksh88 çžåœïŒksh93 ã§ã¯ãªãïŒã®æ©èœãæã£ãŠããæ¬å®¶ã®éçºã¯ 1999 幎é ã§çµãã£ãŠããŸãããPOSIX ã·ã§ã«çå®ä»¥éã® 1997 幎㫠OpenBSD ã§ ã·ã¹ãã ã·ã§ã«ïŒ/bin/shïŒãšããŠæ¡çšãããŠããŸãããŸã MirOS BSD çšãšããŠïŒ2002幎é ïŒã«ïŒãã©ãŒã¯ãã mksh ã§ã¯ ksh88ã»POSIX ã·ã§ã«ãè¶
ããæ©èœã远å ããä»ãã¡ã³ããã³ã¹ãããŠãããAndroid 4.0 以éã®ã·ã§ã«ã«æ¡çšãããŠããŸãã
äœè«ã§ãããç§ã¯ Android ã®ã·ã¹ãã ã«è©³ãããªãã®ã§ Termux ã§ç¢ºèªããŠã¿ãã®ã§ããã·ã§ã«ïŒmkshïŒã®ãã¹ã¯ /system/bin/sh ã§ /bin/ ãã£ã¬ã¯ããªããããŸããã§ããããããã·ãã³ã /bin/sh ã®ã¹ã¯ãªãããåé¡ãªãåãããã調ã¹ãŠã¿ãæã©ããã LD_PRELOAD ã§æå®ãããŠãã libtermux-exec.so ã«ãã£ãŠäºææ§ãå®çŸãããŠããããã§ããçµå±ã®æ Termux ã䜿ã£ãŠãæ¬ç©ã® Android ç°å¢ãšã¯åŒã¹ãªãããã§ã©ããã£ãŠæ¬ç©ã® Android ç°å¢ã§ã·ã§ã«ã¹ã¯ãªããã®åäœãã¹ãããã°ããã®ãæ©ãã§ããŸããïŒroot åã¯é¢åã ããããæ¬ç©ãšèšããã®ããçåã ãããããã Android ã®éçºç°å¢ãšããã®ãããç¥ããªãïŒ
ash ïŒâ dash, BusyBox ashïŒ
1989 幎ã«ã±ãã¹ã»ã¢ã«ã ã¯ã£ã¹ãã«ãã£ãŠäœæãããã·ã§ã«ã§ããåœå㯠Bourne ã·ã§ã« ã®ã¯ããŒã³ãšããŠäœæãããŸããã軜éãã€é«éãªã·ã§ã«ã§ã·ã¹ãã ã·ã§ã«ïŒ/bin/shïŒãšããŠæé©ãšãããŠããŸãã
POSIX ã·ã§ã«çå®ä»¥éã®è©±ã«ãªããŸãã 1993幎㫠NetBSD ã 1996幎㫠FreeBSD ãã·ã¹ãã ã·ã§ã«ãšããŠæ¡çšããŸããã1997幎é ã« Herbert Xu ã«ãã£ãŠ NetBSD sh ãã Debian åãã«ç§»æ€ãããŠãã 2002幎㫠dash (Debian Almquist shell) ã«ååãå€ãããŸããããã®åŸ 2006幎㮠Ubuntu 6.10 ã§ã2011 幎㮠Debian 6.0 ã§ã·ã¹ãã ã·ã§ã«ãšã㊠dash ãæ¡çšãããŸããããããã®äºçš®ã¯äžéšã®äŸå€ïŒlocal ã³ãã³ãïŒãé€ã POSIX ã§èŠå®ãããŠããªãæ¡åŒµæ©èœãæããªããã POSIX ã·ã§ã«ã«éããªãè¿ãã·ã§ã«ã§ãã
2001 幎é ã«çµã¿èŸŒã¿åãã® BusyBox ã« dash ã ash ãšããŠçµã¿èŸŒãŸããŸãããBusybox ash 㯠dash ïŒããã®ä»ã®ãã©ãŒã¯ïŒãšç°ãªã POSIX æºæ ããã bash ãšããçšåºŠã®äºææ§ãå®çŸãç®æããŠããããã§äžéšã®æ¡åŒµæ©èœïŒ[[ ]] ã $EPOCHREALTIME çïŒãçµã¿èŸŒãŸãå§ããŠããŸãã軜éã§ããã¯ãã® BusyBox ã® ash ã®æ¹ããã£ãšã髿©èœãª ash / dash ãšããé転çŸè±¡ãèµ·ããŠãã®ã¯é¢çœãã§ãã
zsh (Z Shell)
1990 幎ã«ã¯ zsh ãç»å ŽããŸããæ Z æŠå£«ã®æŽ»èºã 1989 幎ããå§ãŸã£ãã®ã§ååã®ç±æ¥ã«äœãããã®é¢ä¿ãããã ãããšèª¿ã¹ãã®ã§ããããããŸããã§ãããäžèª¬ã§ã¯ Zhong Shao ãšããææã®ååãç±æ¥ãããã§ããæå㯠csh ã®ãµãã»ããã«ãªãããšãæ³å®ããŠãããããã§ãããããæ³å®ä»¥äžã«æ¡åŒµãã 1.0 æç¹ã§ã¯ ksh ã®ãããªåªããèšèšãš tcsh ã®ãããªã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠã®æ©èœãå Œãåããå€ãã®æ©èœãæèŒãããšããç®æšã«ãªã£ãããã§ããïŒãã®çå±ã§ããã° csh ã®ææ³ãšäºææ§ãããããšã«ãªãã¯ãã§ãããç§ã csh ã«è©³ãããªãã®ã§ã©ãã ãäºææ§ãããã®ãã¯ç¥ããŸãããïŒ
zsh 㯠ã·ã¹ãã ã·ã§ã«ïŒ/bin/shïŒãšããŠäœ¿ãããããšã¯ãªãã£ããšæã£ãŠããã®ã§ããããããããšèª¿ã¹ãŠããæã©ããã Mac OSX 10.0 - 10.1 ã§ zsh (3.0.8 - ?) ã䜿ãããŠããããã§ãïŒåè çŸåšã¯ãåç¥ã®éã bash ã䜿ãããŠããŸãïŒããã以å€ã§ã¯ã·ã¹ãã ã·ã§ã«ãšããŠã¯äœ¿ãããããšã¯ãªããšæããŸãããããã©ã«ãã®ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠã¯ macOS ã Kali Linux ã§æ¡çšãããŠããŸãã
åœåã®ç®çã csh ã§ããããšãã Bourne ã·ã§ã«ãšã®äºææ§ã¯ããã»ã©éèŠèŠããŠããªãã£ããšæãããŸããåèªåå²ãããã©ã«ãã§è¡ããªããªã© Bourne ã·ã§ã«ïŒãŸã㯠POSIX ã·ã§ã«ïŒãšåããç°ãªãéšåãããããã©ã«ãã®ç¶æ ã§ã¯ POSIX ã·ã§ã«ãšäºææ§ãäœããšããå°è±¡ãæã£ãŠããŸãããã¡ããèšå®ã§ POSIX æºæ ã«è¿ã¥ããããšã¯åºæ¥ãŸããåã«éçºè ãè¯ããšèããŠããèšå®ãããã©ã«ãã«ãããšããã ãã§ããªã·ãŒãéãã ãã®ããšã§ããç§ã¯ macOS ã§ã¯ zsh ãã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠäœ¿çšããŠãããŸãããã«ã¹ã¿ãã€ãºãããŸãè¡ã£ãŠããã詳ãããªãã®ã§è©³çްã¯å²æããŸãã
POSIX ã·ã§ã«
çŸåšäœ¿çšãããŠããã·ã§ã«ïŒãããã¯ãã®ç¥å
ïŒã®å€ããåºæã£ãåŸã® 1992 幎㫠POSIX ã·ã§ã«ã POSIX.2: Shell and Utilities ã§æšæºåãããŸãããçŸåšã§ã¯æ®ã©ã®ã·ã¹ãã ã§ POSIX ã·ã§ã«ã /bin/sh ãšããŠããŸãã¯ããã©ã«ãã®ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠäœ¿çšãããŠããŸãã
POSIX ã·ã§ã«ã¯ ksh88 ãããŒã¹ã«çå®ãããŠããŸãããã ã ksh88 ã®ä»æ§ãå
šãŠãå«ãŸããŠããããã§ã¯ãããŸãããç¹ã«å€§ããªæ©èœã§ POSIX ã«å«ãŸããªãã£ãã®ã¯é
åã§ããçç±ã¯ã¯ã£ãããšã¯ããããŸããã§ãããæ§æã䜿ãã¥ãããã£ãïŒarr=(1 2 3) ã§ã¯ãªã set -A arr 1 2 3 ãšæžãå¿
èŠãããïŒãšããæèŠãããããã§ãããŸã åœæã® bash 1.x ã«é
åããªãã£ãã®ãçç±ã®äžã€ãããããŸããïŒbash ã«é
åãæèŒãããã®ã¯ 1996 幎㮠2.0 ããïŒããã®ããæŽå²ã®äžã§ã¯ ksh88 ãã POSIX ã·ã§ã«ãçãŸããŠããã®ã§ãããæ©èœçã«ã¯ POSIX ã·ã§ã«ã«æ¡åŒµæ©èœãå ããã®ã ksh88 ã§ãããã®ããã«èŠããŸãã
Bourne ã·ã§ã«ã«ã¯ãªã POSIX ã·ã§ã«ã§æ°ãã远å ãããæ©èœã¯æ¬¡ã®ãšããã§ãã
- ç®è¡åŒå±éïŒäŸ
ret=$((var + 1))ïŒ - ãã©ã¡ãŒã¿ãŒå±éã®ãã¡åæ¹åé€ãšåŸæ¹åé€ïŒ
${parameter#word}ã${parameter%word}çïŒ -
`cmd`ãæ¹è¯ãã$(cmd)
ç§å人ã®è©±ã«ãªããŸããããã®ãã¡å 2 ã€ã¯ç§ã«ãšã£ãŠç¹ã«éèŠãªæ©èœã§ããããªããªãç®è¡åŒå±éã¯å€éšã³ãã³ãã® expr ã®ä»£ããã«äœ¿ãããšãã§ãããã©ã¡ãŒã¿ãŒå±éãå€éšã³ãã³ãã® sed ã tr ã眮ãæããããšãã§ããæ©èœã ããã§ããã¹ãã£ãŒãã³ã»ããŒã³ãèšã£ãŠããããã«ããã©ãŒãã³ã¹ã®åé¡ã®å€ãã¯å€éšã³ãã³ãïŒfork ãš execïŒã§ããç§ããã£ãŠããã·ã§ã«ã¹ã¯ãªããã«ããããã°ã©ãã³ã°ã§ã¯å°ããããŒã¿ãå€ãæ±ãããå€éšã³ãã³ãã®åŒã³åºããæžããããšã¯å€§ããªããã©ãŒãã³ã¹æ¹åã«ç¹ãããŸããããã®ããç§ã¯å¯Ÿå¿ããã·ã§ã«ã®æäœã©ã€ã³ã Bourne ã·ã§ã«ã§ã¯ãªã POSIX ã·ã§ã«ã«ããŠããŸãããã¡ãã Bourne ã·ã§ã«ã¯ãã§ã«å€ãã»ãŒäœ¿ãããŠãªãã ãããšããã®ãçç±ã®äžã€ã§ãã
POSIX ã·ã§ã«ãžã®ç§»è¡ç¶æ³
POSIX ã·ã§ã«ãçå®ããããããšèšã£ãŠãåãã³ããŒã¯ããã« POSIX ã·ã§ã«ã«ç§»è¡ããããã§ã¯ãããŸãããäºææ§ç¶æã®ããç¹ã« Unix ã§ã¯é·ãé Bourne ã·ã§ã« ãã·ã¹ãã ã·ã§ã«ãšããŠäœ¿ãããŠããããã§ããããšãã° Solaris 10 㯠2005幎ã«ãªãªãŒã¹ãããŸããã /bin/sh 㯠Bourne ã·ã§ã«ã§ãïŒãã ã POSIX ã·ã§ã«ã§ãã ksh88 ãå«ãŸããŠããé©åã«èšå®ããã° POSIX æºæ ã®ã·ã¹ãã ãšããŠäœ¿ããã®ã ãšæããŸãïŒãSolaris 10 ã®ãµããŒã㯠Oracle Premier Support ã 2018 幎ã§çµäºããŠããŸãã Extended Support ã2024幎ãŸã§ãªã®ã§ãäžå¿ã¯ãŸã 䜿ãããŠããããšã«ãªããŸããããããªããããã ãèŠãéã Bourne ã·ã§ã«ãã·ã¹ãã ã·ã§ã«ãšããŠèšå®ããã OS ãåºè·ãããã®ã¯é
ããšã 200x 幎ããããŸã§ã§ãªãªãŒã¹åŸ 10 幎以äžçµéããŠãããããã»ãšãã©ã®ç°å¢ã§ POSIX ã·ã§ã«ãžã®ç§»è¡ã¯å®äºããŠãããšæãããŸãã
ã¡ãªã¿ã«ãå ¥éUNIXã·ã§ã«ããã°ã©ãã³ã°ãã§ã¯ POSIX ã·ã§ã«ã¯æ±çšæ§ãæªããšæžãããŠããããã§ããããã®æ¬ã®çºè¡æ¥ãæ¥æ¬èªçã ãš 2003 幎ïŒç¿»èš³å ã¯ãã€ã ããïŒïŒãªã®ã§ããããã«å€ãæ å ±ã ãšæããŸãã
çŸåšã®ã·ã¹ãã ã·ã§ã«ã¯ã©ã®ã·ã§ã«ïŒ
ãšããã§ Unix ã®æä»£ããã·ã§ã«ã®ãã¹ã¯ /bin/sh ã§ãããã§ã¯çŸåšäžçªäœ¿ãããŠã /bin/sh ã¯ã©ã®ã·ã§ã«ã ãšæããŸããïŒã¿ããªã·ã§ã«ã¹ã¯ãªããã bash ã§æžããŠããã®ã ãã bash ã«æ±ºãŸã£ãŠãããšæããŸããïŒïŒæ³šæ ã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã®è©±ã§ã¯ãããŸããïŒ
- Debian / Ubuntu ã»ã»ã» dash
- RedHat / CentOS ã»ã»ã» bash
- Alpine / OpenWrt ã»ã»ã» busybox ash
- macOS ã»ã»ã» bash 3.2.57
- Android ã»ã»ã» mksh
- FreeBSD ã»ã»ã»FreeBSD shïŒash ç³»ïŒ
- OpenBSD ã»ã»ã» OpenBSD kshïŒpdksh ç³»ïŒ
- Solaris 11 ã»ã»ã» ksh93
ã¿ããšã«ãã©ãã©ã§ããã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ãšããŠäœ¿ãããŠããã·ã§ã«ã¯ bash ãäžçªå€ããšæãã®ã§ãããLinux ã®åæ°ä»¥äžã®ã·ã§ã¢ïŒWSL ãå
¥ããã°ãã£ãšå¢ãããã§ãïŒãå ããŠããã Ubuntu ãš Debian ã§ããããšãèžãŸãããšçŸåš /bin/sh ãšããŠãã£ãšã䜿ãããŠããã·ã§ã«ã¯ dash ãšããããšã«ãªãã§ãããã
dash ãšããã®ã¯ POSIX ã·ã§ã«ã«ãšãŠãè¿ãã·ã§ã«ã§é
åãªã©ã®æ¡åŒµæ©èœãæã£ãŠããŸãããç§ã®æèŠã§ã¯ã·ã§ã« = bash ã®æµãããã£ãã®ã¯ Ubuntu 6.10 ã§ dash ã /bin/sh ãšããŠæ¡çšããã 2006 幎ããããŸã§ã§ããã€ãŸã bash ã§æžããŠããã°å€§äžå€«ã ãããšããã®ã¯å€ãæä»£ã®è©±ã§ãã§ã«çµãã£ãŠãããçŸåšã¯ POSIX ã·ã§ã«ã«æºæ ããŠã³ãŒããæžãããšãéèŠãªæä»£ã«å€ãã£ãŠããŸããæ¬çªç°å¢ã Debian ç³»ã§æå
ã§æžããã·ã§ã«ã¹ã¯ãªãããåããªãã£ããšãããããªè©±ããšãã©ãèããŸãã
åã·ã§ã«ã®æ¡åŒµæ©èœã¯äŸ¿å©ãªã®ã§äœ¿ã£ãŠãè¯ããšæããŸãããå¿ èŠãªãç®æã¯ã¯ãªãã¹ã䜿ããªãããã«ããã®ãç§ã®ãªã¹ã¹ã¡ã§ããããããã°ä»ã®ã·ã§ã«ãžã®ç§»æ€æ§ãé«ãŸãã®ã§ macOS ã®ããã« bash ãã zsh ã«ä»£ãããããªããšããã£ãŠãä¿®æ£ãããå°ãªããŠãã¿ãŸãããŸã POSIX ã·ã§ã«ã®æ¹ãæ©èœãå°ãªãã®ã§èŠããã®ãç°¡åã§ããç¹ã«ã·ã§ã«ã¹ã¯ãªããã䜿ããããªããšæã£ãŠã人ããå€ãã®æ©èœãæã£ãé£ãã bash ã«ææŠããŠãããããªæžãæ¹ãèŠããããªããŠãç§»æ€æ§åé¡ã«èŠããã§ãããã«ã·ã§ã«ã¹ã¯ãªãããå«ãã«ãªããšããæµããèŠããšãã ããæåããç°¡å㪠POSIX ã·ã§ã«ã«ããŠããã°ããã®ã«ãšæããã«ã¯ããããŸããã
POSIX ã·ã§ã« æŽæ°æ å ±
POSIX ã·ã§ã«ãšãŠãŒãã£ãªãã£ã¯ 1992 幎㫠POSIX.2 ãšããŠæšæºåãããåŸ POSIX.1-2001 ãš POSIX.1-2008 ã®äºåæ¹å®ãããŠããããã§ãã2004 edition ãšã 2018 editionãšããã®ã¯ãèŠæ Œãæ¹å®ããŠããã®çްããä¿®æ£ïŒTC - Technical CorrigendaïŒãåæ ãããèšæ£çãšããããšã ãšæããŸãããŸã POSIX ãš Single UNIX Specification ãš IEEE ãšããå¥ã ã®æšæºåå£äœããããã§ãããåãå 容ãå ±æããŠããããã§ããïŒãããããïŒ
仿§æžã®å ŽæïŒãã¿ãŸãããã¡ãããšæŽçã§ããŠããŸãããPOSIX ãã SUS ã®çªå·ã§åºå¥ããã»ããããããããïŒïŒ
- POSIX.1-2008, SUSv4 ïŒææ°ïŒ
- POSIX.1-2001, SUSv3
- SUSv2
- The Single UNIX® Specification, Version 2 Copyright © 1997 The Open Group
- the Commands and Utilities, Issue 5
- SUSv1
- Single UNIX Specification Version 1, 1995 Edition
- Commands and Utilities, Issue 4, Version 2
- Issue Tracker ïŒèªåçšãªã³ã¯ããã€ããªããªããã©ãçããªãã®ã§ïœïŒ
- Austin Group Defect Tracker ïŒæ¬¡ã® Issue 8 ã® drafts ãšããããŸããïŒ
ããŸã POSIX ã IEEE ã®èŠæ Œçªå·ããããããã
-
IEEE 1003ã POSIX é¢é£å šäœ ã® IEEE ã®èŠæ Œçªå· -
IEEE 1003.nã®nãã«ããŽãªãæå³ãããµãçªå·ããã®åŸãã«ãšãã£ã·ã§ã³ãæå³ãã西æŠãã€ãã - æåã®ä»æ§ã¯
IEEE 1003.1-1988- IEEE Standard Portable Operating System Interface for Computer Environments - POSIX ãšããã®ã¯å
ã
IEEE 1003.1-1988ãåç §ããããã«ããããããã€ããå¥å - POSIX ã ãšã«ããŽãªãææ§ã«ãªãã®ã§åŸã«
POSIX.1ãšãã圢åŒã®ããæ£ç¢ºãªå¥åã«å€æŽãã -
POSIX 1003.1ãšããèšãæ¹ã¯ 1003 ã®æå³ãéè€ããŠããééãïŒãšæãã opengroup ã§ã䜿ãããŠãã - äºå®äž
IEEE 1003.n-yyyyãšPOSIX [1003.]n[-yyyy]ã¯åãæå³ãšèããŠè¯ããã - æåã®é ã¯ã·ã§ã«ãšã³ãã³ãã®ä»æ§ãåé¢ãããŠãã (POSIX.2 - Shell and Utilities)
-
POSIX 1003.2ãšæžããŠãããã®ããããçµå±ã¯POSIX.2ã®ããš -
POSIX.1-2001ã§POSIX.2ãPOSIX.1ã«çµ±åããPOSIX.2ã¯ãªããªã£ã - å³å¯ã«æžããã人ã 2001 幎ããåã®è³æã¯ .1 ãšã .2 ãšãã€ããŠããã©ä»ã¯
POSIX[.1]ã ã - ãã®ä»ã®èŠæ Œåã¯ãC ãš UNIX ã®æšæºèŠæ Œãåç §
åè
- http://www.opengroup.org/austin/papers/posix_faq.html
- http://www.opengroup.org/austin/papers/backgrounder.html
- https://en.wikipedia.org/wiki/POSIX
- http://stallman.org/articles/posix.html
ãŸãšã
ãã®èšäºã§ã¯ POSIX ã·ã§ã«ãç»å ŽãããŸã§ã®æŽå²ããŸãšããŠã¿ãŸããããããäžã€ã®ããŒãã¯ã·ã§ã«ã¹ã¯ãªãããããã°ã©ãã³ã°èšèªã§ãããã©ããã§ããçŸåšãã䜿ãããŠãã·ã§ã«ã®å€ãã AT&T ãéçºããã·ã§ã«ã®ãªãŒãã³ãœãŒã¹çãäœãããšããå§ãŸã£ãŠããããšãèãããšãã·ã§ã«ã®é²åã®æ¬æµã¯ AT&T ã«ãã£ããšèšã£ãŠè¯ããšæããŸãããããã調ã¹ãçµæãæåã® Thompson ã·ã§ã«ã¯å¥ãšã㊠PWB ã·ã§ã«ãBourne ã·ã§ã«ãKornShell ãã¹ãŠãã·ã§ã«ãããã°ã©ãã³ã°èšèªãšããŠäœ¿ããããã«èšèšãããšããããšãã¯ã£ãããšè¿°ã¹ãããŠããããšãããããŸããã
ãã®èšäºããŸãšããã«ããã£ãŠèª¿ã¹ãŠãäžã§ç¹ã«å°è±¡çã ã£ãã®ã¯ã¹ãã£ãŒãã³ã»ããŒã³ãèšã£ããã·ã§ã«ã¯ Unix ç°å¢ãžã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ããããšããèšèã§ããæè¿ zx ãšãã JavaScript ã§ã·ã§ã«ã¹ã¯ãªããçžåœã®ã¹ã¯ãªãããæžãããšãåºæ¥ãããŒã«ããªãªãŒã¹ãããŸããããã®ãããªããŒã«ãã©ã€ãã©ãªã¯ããã€ããããŸãããããã¯æ¬åœã« Unix ç°å¢ãžã®ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠé©åãªèšèªã«ãªã£ãŠããã®ã§ããããïŒã€ã³ã¿ãŒãã§ãŒã¹ãšèšãããã«ã¯äœ¿ãããããªããã°ãªããŸããããã£ã¬ã¯ããªãç§»åããæãã·ã§ã«ã¹ã¯ãªããã§ããã° cd /tmp ãšå
¥åããã ãã§ããããã zx ã§ã¯ cd('/tmp') ãšæžããªããã°ãªããã«ãã³ãšã·ã³ã°ã«ã¯ã©ãŒããå¿
èŠã«ãªããŸããã³ãã³ãããªãã·ã§ã³ãã€ããŠå®è¡ããæãã³ãã³ããšã³ãã³ãããã€ãã§ã€ãªããæãzx ã§ã¯ã·ã§ã«ã¹ã¯ãªããããããã£ãšå€ãã®ã³ãŒããå¿
èŠã«ãªãããã«èŠããŸããäŸãã°ãããã€ã³ã¿ã©ã¯ãã£ãã·ã§ã«ã§å
¥åãããšããŠèŠçã«ãªããªãã§ããããïŒå€éšã³ãã³ããå®è¡ã§ããã©ã€ãã©ãªãšããŠã¯ããåºæ¥ãŠãããšæããŸãããç§ã«ã¯èšèªãšUnix ç°å¢ã®éã«ã©ã€ãã©ãªãšããåã®å£ãããããã«èŠããŸãããã¡ãããã¹ãŠã®ã±ãŒã¹ã§ã·ã§ã«ã¹ã¯ãªãããåªããŠãããšãã話ã§ã¯ãããŸãããUnix ãšããç°å¢ã®ããã®ããã°ã©ãã³ã°èšèªã§ããã°ãæåãããã®ããã«èšèšãããã·ã§ã«ã¹ã¯ãªãããé©åã§ããããŠã§ãããã¹ã¯ããããšããå¥ã®ç°å¢ã§ã¯å¥ã®èšèªãé©åãšãã話ã§ãã
ããŠããããå ãã·ã§ã«ã¯äžäœã©ããªã£ãŠããã®ã§ããããïŒã»ãšãã©ä»ãšå€ãããªãæ©èœãç¶æããŠããã®ãããããšãå€§å¹ ãªæŽæ°ã¯ããã®ãïŒããæ¬¡äžä»£ã® POSIX ã·ã§ã«ãèŠå®ããããšãããé åã远å ã®ãã©ã¡ãŒã¿ãŒå±éãå ããŠã»ããã§ãããã§ãããŸãæ©èœãå ãããšã·ã§ã«ã¹ã¯ãªããã§ç¡è¶ããã人ïŒãïŒããç§ãïŒïŒãåºãŠããã®ã§æ©ãŸããæã§ãããªããžã§ã¯ãæåãšã JavaScript ã®ãããªæ°ããææ³ã®è¿œå ãšãã¯å¿ èŠãªããšæããŸãããããã¡ãã£ãšã ãã·ã§ã«ã¹ã¯ãªããã§ããã°ã©ãã³ã°ããããããŠæ¬²ããã§ãããªããŠã£ãã£ãŠæ¬ç©ã®ããã°ã©ãã³ã°èšèªã§ãããïŒ