FAQïŒ OS Infernoãšã¯äœã§ããããªãå¿
èŠãªã®ã§ããïŒé·å¹Žã®Inferno OSã·ã§ã«ã¯ãéåžžã«åŠå®çãªææ
ãåŒãèµ·ãããŸããã ãããŠãç§ã¯
ã€ã³ãã§ã«ãshã§äœäººãã®äººã
ã
åãã§ããããšã«æ°ã¥ããããšããªãã£ãã ãããã圌ããèšãããã«ãããã¯æ±ºããŠé
ãããã¯ãŸãã§ã-仿¥ãç§ã¯ã·ã§ã«ã«æ
éã«å¯ŸåŠããããšã«æ±ºããŸããããããŠçµæãšããŠãç§ãæéãåããŸãã-ããã¯æ¬åœã«ãŠããŒã¯ãªããšã§ãïŒ ä¿¡ããããªãã»ã©ãšã¬ã¬ã³ãã§ã·ã³ãã«ã
ããã§ãã客芳æ§ãé«ããããã«æ¬ ç¹ããå§ããŸãã äž»ãªããšã¯ãã·ã§ã«ãéåžžã«é
ãããšã§ãã çç±ã¯
/dis/sh.disãŸãããããã¹ãŠã®ã·ã§ã«ãã€ã³ãã§ã«ãïŒå®éã«ã¯ããã€ããããŸãããçŸåšã¯
/dis/sh.disã«ã€ããŠè©±ããŠ
/dis/sh.dis ïŒã¯éåžžã«é
ãã§ãã ããã¯éåžžã«å¥åŠã§ã éåžžãLimboïŒJITã¢ãŒãïŒã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®é床ã¯ãCãšPerlãªã©ã®é«éã¹ã¯ãªããèšèªã®é床ã®éã§ãã ãããã£ãŠã 
shæ¬æ Œçãªã¢ããªã±ãŒã·ã§ã³ã¯æ©èœããŸããã ããããããã«ããããããããããã¿ããšã«LimboãçºèŠããã®ã¯äžäŸ¿ã§ãããã®ããããã¹ãŠã®åãéå§ã¹ã¯ãªããããã®ä»ã®å°ããªããšã
shã§èšè¿°ããå¿
èŠããããŸãã 2çªç®ã®éå€§ãªæ¬ ç¹ã¯ãããã¹ãã³ã³ãœãŒã«ã§äœ¿çšããããšã®äžäŸ¿ããã³ãã³ãå±¥æŽã®æ¬ åŠãèªåè£å®ãå
¥åæã®äŸ¿å©ãªç·šéãéåžžã«ãã£ãšãããããšã§ãïŒããããç§ã¯
rlwrapãŠãŒãã£ãªãã£ã«ã€ããŠèãããšããã§ãã 第äž-ãã®ã·ã§ã«ã®æ§æã¯ã察ã«ãªã£ãŠããªãåŒçšç¬Šã䜿çšããããšã¯çããã絶察ã«ä»ã®ã·ã§ã«ã®ããã¯ã©ã€ãã䜿çšããŠã¹ã¯ãªããã®æ§æã匷調ããããšãããšïŒã€ã³ãã¡ãã«ã®æ¢è£œã®ããã¯ã©ã€ãããªãããïŒå®å
šãªæªå€¢ã«ã€ãªãããŸãã 仿¥ããã®åé¡ã解決ããããã«ãvimã®æ§æåŒ·èª¿è¡šç€ºãå®è£
ããŸããããã®ãããã·ã§ã«ã«å¯ŸåŠããããã«åº§ããŸããããã®çµæãæ§æåŒ·èª¿è¡šç€ºã®ä»£ããã«ãæµæã§ããããã®èšäºãæžããŠããŸãã :)
å
容
ç§ãã¡ã®ã¹ã¯ãªããã¯äœãããäœãããäœããäœãããŠããŸããïŒ
/dis/sh.disãµããŒããããæ©èœã¯å°è±¡çã§ãïŒ æ¡ä»¶ä»ãã¹ããŒãã¡ã³ããšã«ãŒããããããŸããïŒ æ©èœãªãã ãããŠãäœãããã«ããããããã®æ¡ä»¶ã«ã©ã®ããã«ååšããããšãã§ããŸããïŒ ã芧ãã ããã ã ããäœã§ããïŒ
- ã¢ããªã±ãŒã·ã§ã³ã®èµ·åïŒãã€ãã©ã€ã³ããã³I / Oãªãã€ã¬ã¯ããå«ãïŒ
- è¡ãè¡ãªã¹ããã³ãã³ããããã¯
- ç°å¢å€æ°
- ãã¡ã€ã«åãã³ãã¬ãŒãïŒ*ãïŒã[...]ïŒ
- ããã€ãã®çµã¿èŸŒã¿ã³ãã³ããšæååãæäœããããã®ã³ãã³ã
ãããããæåŸã®ãã€ã³ããèŠãŠãããã¯ïŒ ããã€ãã®ç¹å¥ãªããŒã ã 確ãã«åœŒãã¯æ®ããããŸãããã¹ãŠãæ±ãã§ãããâŠããããããããããªãã¯æšæž¬ããŸããã§ããã çµã¿èŸŒã¿ã³ãã³ãã®ãã¡ãéåžžã¯
exit ã 
run ãããã³
load 3ã€ã䜿çšãã
load ã äžè¬çã«äœ¿çšãããæååã³ãã³ãã¯
quoteãš
unquoteã§ãã 
runã«ã€ããŠã¯ãçŸåšã®ã·ã§ã«ïŒã¢ããã°
.ãŸãã¯bashã®
sourceã§æå®ãããã¹ã¯ãªãããå®è¡ããã ãã§ãã
ãããã 
load -ã¯ããããã¯ç匟ã§ãïŒ Limboã§äœæããã远å ã¢ãžã¥ãŒã«ãçŸåšã®ã·ã§ã«ã«ããŒããã颿°ãäŸå€ãæ£èŠè¡šçŸãæ°åŠæŒç®ãªã©ã®å Žåãã·ã§ã«ã«æ©èœãå®å
šã«è¿œå ã§ããŸãã ãªã© ãããã®ã¢ãžã¥ãŒã«ãåçã«ã¢ã³ããŒãã§ãã
unloadã³ãã³ãããããŸãã :)ããã«ãé¢ããããããŒãå¯èœãªã¢ãžã¥ãŒã«ããªããŠããã·ã§ã«ã¯å®å
šã«æ©èœçã§ã-ãããã裞ã®shãã«ifãšforãå®è£
ããããšã§ãèšäºã®æåŸã§èšŒæããŸãïŒ
ãããç§ãèšåããã®ãå¿ããŠããäœãã ïŒä»ã¯ç¢ºãã«ãããïŒãã ãšæããŸããïŒïŒåœŒã¯ãŸã ã³ã¡ã³ããæ¯æããŠããŸãã 
#å§ãŸãã :)
ã¢ããªã±ãŒã·ã§ã³ãèµ·åãã
* nixã·ã§ã«ãšã»ãšãã©åãã§ãïŒ
- ã¢ããªã±ãŒã·ã§ã³ïŒ .disãã¡ã€ã«ïŒããã³ã¹ã¯ãªããïŒæåã®è¡ãshebang#!ã§ãããã¡ã€ã«ïŒãå®è¡ããŸã
- ããŒã ã¯åé¢ãããŠã;
- &ä»ããŠããã¯ã°ã©ãŠã³ãã§ã³ãã³ããå®è¡ãã
- ã³ãã³ããã€ãã©ã€ã³
- >ã- >>ããã³- <ä»ããŠstdin / stdoutããªãã€ã¬ã¯ãããŸã
 ; echo one two | wc 1 2 8 
ããããéãããããŸãã
远å ã®ã³ãã³ãI / Oãªãã€ã¬ã¯ã
- ãã¡ã€ã«èšè¿°åã®æå®ïŒstderrã®ãªãã€ã¬ã¯ããŸãã¯è¿œå ã®èšè¿°åã«å ããŠãããã©ã«ãã§0ã1ãããã³2ã䜿çšå¯èœïŒ
 - cmd <stdin.txt >stdout.txt >[2]stderr.txt
- cmd >[1=2]ïŒstdinãstderrã«ãªãã€ã¬ã¯ãïŒ
- cmd <[3]file.txtïŒã³ãã³ãã¯ããã¡ã€ã«ããèªã¿åãããã«è¿œå ã®ãã¡ã€ã«èšè¿°å3ãéããŠèµ·åãããŸãïŒ
- cmda |[2] cmdbïŒæåã®ã³ãã³ãã®stdoutã®ä»£ããã«ãstderrã¯ãã€ãã©ã€ã³å
¥åã«éä¿¡ãããstdoutã¯åã«ç»é¢ã«è¡šç€ºãããŸãïŒ
- cmda |[1=2] cmdbïŒstderrã¯stdout cmdaã§ã¯ãªããã€ãã©ã€ã³ã«å床éä¿¡ãããŸãããstdinã§ã¯ãªãstdout cmdbã«æ¥ç¶ããŸã-ãã¡ãããèªã¿åããšæžã蟌ã¿ã§ã¯ãªããªãŒãã³ããŸãïŒ
 
 
- èªã¿æžãã®ããã«åæã«éã
 - cmd <>in_pipe <>[1]out_pipeïŒstdinãšstdoutã¯ãåæã«ç°ãªããã¡ã€ã«ã®èªã¿åããšæžã蟌ã¿ã®ããã«éãããŠããŸãïŒ
 
 
- éç·åœ¢ã³ã³ãã¢
 - cmd <{;;} >{;;}ïŒ- cmd <{;;} >{;;}äž¡æ¹ã®ãããã¯ã¯cmdãšäžŠè¡ããŠèµ·åãããŸãããcmdã¯2ã€ã®ãã©ã¡ãŒã¿ãŒãåãåããŸã-ãã¡ã€ã«åa la- /fd/ããã€ãçµç±ã§æåã®stdoutã«æ¥ç¶ãããŸãã³ãã³ããããã¯ãš2çªç®ã®ã³ãã³ããããã¯ã®æšæºå
¥åïŒ
 
 
æåŸã®æ©èœã¯ç¹ã«è峿·±ããã®ã§ãã ããšãã°ã2ã€ã®
cmpãã¡ã€ã«ããã«ããšæ¯èŒããæšæºã³ãã³ãã¯ããã¡ã€ã«ã§ã¯ãªããä»ã®2ã€ã®ã³ãã³ãã®çµæãæ¯èŒã§ããŸãïŒ 
cmp <{ ls /dir1 } <{ ls /dir2 } ã
$ã¹ããŒã¿ã¹
çµäºã¹ããŒã¿ã¹ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è£
ããããã®éåžžã«çããã¢ãããŒãã åŸæ¥ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ããã¹ãŠã®ããã°ã©ã ã¯æ°åã§çµäºããŸãããã¹ãŠãæ£åžžãªå Žåã¯0ã倱æããå Žåã¯ãã®ä»ã®ããã°ã©ã ã§ãã infernoã§ã¯ããã¹ãŠã®ããã°ã©ã ã¯åçŽã«çµäºãããïŒãã¹ãŠãæ£åžžã«åŠçãããŠããå ŽåïŒãäŸå€ãã¹ããŒããŸããäŸå€ã®å€ã¯ãšã©ãŒããã¹ããå«ãæååã§ãã
ãããéåžžã®ãšã©ãŒã§ããå Žåããã®è¡ã¯ãfailïŒãã§å§ãŸãå¿
èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãã¯ã©ãã·ã¥ãããŸããã§ãããããã®ãšã©ãŒããã®ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããŠãŒã¶ãŒã«è¿ãããšã§çµäºãããã ãã§ãïŒéåžžãããã¯ã·ã§ã«ã§ãïŒã ãšã©ãŒããfailïŒãã§å§ãŸããªãå Žåãã¢ããªã±ãŒã·ã§ã³ãçµäºããåŸããã®ããã»ã¹ã¯ã¡ã¢ãªã«æ®ãïŒãå£ãããç¶æ
ïŒããããã¬ãŒã§èª¿ã¹ãŠããã®äŸå€ãçºçããçç±ãèŠã€ããããšãã§ããŸãïŒä¿åãã代ããã«ãã³ã¢ãã³ãã«é¡äŒŒïŒã¡ã¢ãªå
ã®ãã£ã¹ã¯ã§ãã³ã°ããŸãïŒã
ãããã£ãŠãå®è¡äžã®ã³ãã³ãã®å®äºåŸããã®ãçµäºã³ãŒãã-ã€ãŸã äŸå€ãšã©ãŒããã¹ãã¯
$statusç°å¢å€æ°ã«ãããŸãïŒãfailïŒã以å€ã®äŸå€ããã¹ãã«äœãå«ãŸããŠããªãå Žåãã 
$status ãè¡ã¯ãfailedãã«ãªã
$status ïŒã
è¡ãè¡ãªã¹ããã³ãã³ããããã¯
Infernovã·ã§ã«ã¯
ãæååãšæååã®ãªã¹ã
ã®ã¿ãæ±ããŸãã
ã²ã
æååã¯ãã¹ããŒã¹ãç¹æ®æåãå«ãŸãªãåèªããŸãã¯äžéåŒçšç¬Šã§å²ãŸããæåã§ãã ãã®ãããªæååå
ã®å¯äžã®ããšã¹ã±ãŒãå¯èœãªãæåã¯ãåäžåŒçšç¬Šèªäœã§ããã2ã€ã®ãã®ãããªåŒçšç¬Šã§èšè¿°ãããŠããŸãã
 ; echo 'quote '' <-- here' quote ' <-- here 
\ nã\ tã倿°ã®è£éãªã©ã¯ãããŸãã in rowsã¯ãµããŒããããŠããŸããã æååã«æ¹è¡æåãæ¿å
¥ããå¿
èŠãããå Žåã¯ããã®ãŸãŸïŒEnterããŒãæŒããŠïŒè²Œãä»ãããããã®æåãå«ã倿°ãšæååãé£çµããŸãã infernoã«ã¯ãã³ãŒãã«ãã£ãŠä»»æã®æåãåºåã§ãã
unicodeïŒ1ïŒãŠãŒãã£ãªãã£ããããŸããããã¯ããã«ãã䜿çšããŠè¡ãããŸãïŒæ§é 
"{}ã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãããçŸæç¹ã§ã¯bash 
``é¡äŒŒç©ãšèããŠãã ããïŒïŒ
 ; cr="{unicode -t 0D} ; lf="{unicode -t 0A} ; tab="{unicode -t 09} ; echo -n 'a'$cr$lf'b'$tab'c' | xd -1x 0000000 61 0d 0a 62 09 63 0000006 
æååã«ã¯äºéåŒçšç¬Šã¯äœ¿çšãããŸããïŒã¡ãªã¿ã«ãäºéäºéåŒçšç¬Šã¯ã€ã³ãã¡ãŒã³ã·ã§ã«ã§ã¯äœã«ã䜿çšãããŸããïŒã
ã³ãã³ããããã¯
ã³ãã³ãã®ãããã¯ã¯äžæ¬åŒ§å
ã«æžã蟌ãŸãããããã¯å
šäœãã·ã§ã«ã«ãã£ãŠ
1è¡ãšããŠåŠçãããŸãïŒäžæ¬åŒ§å
ã®æåãå«ãïŒã
 ; { echo one; echo two } one two ; '{ echo one; echo two }' one two 
åäžåŒçšç¬Šã§
shããæååãšã®å¯äžã®éãã¯ã 
shãã³ãã³ããããã¯ã®æ§æããã§ãã¯ããããããããã³ã³ãã¯ããªè¡ã«åãã©ãŒãããããããšã§ãã
 ; echo { cmd | } sh: stdin: parse error: syntax error ; echo { cmd | cmd } {cmd|cmd} ; echo { echo one echo two } {echo one;echo two} 
è¡ã®ãªã¹ã
æååã®ãªã¹ãã¯ãç©ºçœæåã§åºåããããŒãå以äžã®æååã§ãã ãããã¯æ¬åŒ§ã§å²ãããšãã§ããŸãããã»ãšãã©ã®å Žåãããã¯å¿
èŠãããŸããã
ã·ã§ã«ã³ãã³ãã¯ã 
åã«è¡ã®ãªã¹ãã§ããæåã®è¡ã«ã¯ã³ãã³ããŸãã¯ã³ãŒããããã¯ãå«ãŸããæ®ãã®è¡ã¯ãããã®ãã©ã¡ãŒã¿ãŒã§ãã
 ; echo one two three one two three ; echo (one two) (three) one two three ; (echo () (one (two three))) one two three ; ({echo Hello, $1!} World) Hello, World! 
æååã®ãªã¹ããé£çµããã«ã¯ã 
^æŒç®åã䜿çšããŸãã åãæ°ã®èŠçŽ ãå«ã2ã€ã®ãªã¹ãã«é©çšã§ããŸãïŒèŠçŽ ã¯ãã¢ã§é£çµãããŸãïŒããŸãã¯ãªã¹ãã®1ã€ã«èŠçŽ ã1ã€ã ãå«ãŸããŠããå¿
èŠãããã2çªç®ã®ãªã¹ãã®åèŠçŽ ãšé£çµãããŸãã ç¹å¥ãªå ŽåãšããŠãäž¡æ¹ã®ãªã¹ãã«ãããã1ã€ã®èŠçŽ ããå«ãŸããŠããªãå Žåã2è¡ã®éåžžã®é£çµãååŸãããŸãã
 ; echo (abc) ^ (1 2 3) a1 b2 c3 ; echo (ab) ^ 1 a1 b1 ; echo 1 ^ (ab) 1a 1b ; echo a ^ b ab 
éåžžã1ã€ã®ã·ã§ã«ã³ãã³ãã1è¡ã§èšè¿°ããå¿
èŠããããŸãããæ¬¡ã®è¡ã§ã³ãã³ããç¶è¡ãããããšã瀺ãç¹å¥ãªæåã¯ãããŸããã ããããã³ãã³ããè€æ°ã®è¡ã«åå²ããããšã¯éåžžã«ç°¡åã§ããåã®è¡ã®è¡ïŒåäžåŒçšç¬ŠïŒãŸãã¯ã³ãã³ããããã¯ïŒäžæ¬åŒ§ïŒãŸãã¯è¡ã®ãªã¹ãïŒæ¬åŒ§ïŒãéãããéãããããããªã¹ãé£çµæŒç®åã§åã®è¡ãçµäºããŸãã
ç°å¢å€æ°
å°çã®ã·ã§ã«ã§å€æ°ãæäœããããšã¯ãåŸæ¥ã®ã·ã§ã«ã«äžèŠäŒŒãŠããŸãããã ãŸãããŠã¯ãããŸããïŒ
 ; a = 'World' ; echo Hello, $a! Hello, World! 
/ env
Inferno OSã®ç°å¢å€æ°ã¯ãåŸæ¥ã®OSãšã¯ç°ãªãæ¹æ³ã§å®è£
ãããŸãã ç°å¢å€æ°ãæäœãã 
int execvpe(const char *file, char *const argv[], char *const envp[]);ãããªæªå€¢ãéããŠåããã»ã¹ã«æž¡ãããã®è¿œå ã®POSIX APIãå°å
¥ãã代ããã« ç°å¢å€æ°ã¯ãåã«
/envãã£ã¬ã¯ããªå
ã®ãã¡ã€ã«ã§ãã ããã¯è峿·±ãå¯èœæ§ãæäŸããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯
/envã
ãšã¯ã¹ããŒãïŒ listenïŒ1ïŒããã³
exportïŒ4ïŒçµç±
ïŒããã ãã§ããããã¯ãŒã¯çµç±ã§ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«ç°å¢å€æ°ãžã®ã¢ã¯ã»ã¹ãæäŸã§ããŸãã
/envãã¡ã€ã«ãäœæãåé€ã倿Žããããšã«ãããç°å¢å€æ°ãäœæ/åé€/倿Žã§ããŸãã ãã ããçŸåšã®shã¯ã¡ã¢ãªå
ã®ãã¹ãŠã®ç°å¢å€æ°ã®ã³ããŒãä¿æããŠããããã 
/envå
ã®ãã¡ã€ã«ãä»ããŠè¡ããã倿Žã§ã¯ãçŸåšã®shã§ã¯ãªãã¢ããªã±ãŒã·ã§ã³ãèµ·åãããŸãã äžæ¹ãã·ã§ã«ã®éåžžã®æ¹æ³ã§ïŒ 
=æŒç®åã䜿çšããŠïŒå€æ°ã倿Žãããšã 
/envãã¡ã€ã«ãèªåçã«æŽæ°ãããŸãã
ã·ã§ã«å€æ°åã«ã¯ãæ¬¡ã®æåãå«ããããšãã§ããŸãã ãã¡ã€ã«åã«äœ¿çšã§ããªããã®ïŒããšãã°ãnames 
. ã 
.. ãããã³
/ãå«ãïŒã ãã®ãããªååã®å€æ°ã¯ãçŸåšã®shã§ã®ã¿äœ¿çšã§ããèµ·åããã¢ããªã±ãŒã·ã§ã³ã«ã¯è¡šç€ºãããŸããã
ãªã¹ã
å¥ã®éèŠãªéãã¯ããã¹ãŠã®å€æ°
ã«æååã®ãªã¹ãã®ã¿ãå«ãŸããŠããããšã§ãã 1è¡ã倿°ã«å
¥ããããšã¯ã§ããŸãã-ããã¯åžžã«1è¡ã®ãªã¹ãã«ãªããŸãã
空ã®ãªã¹ãã倿°ã«ä¿åãããšïŒæç€ºçã«
a=()ãå²ãåœãŠãããæé»çã«
a=ãä»ã
a= ïŒã倿°ãåé€ãããŸãã
- $varã¯var倿°ããè¡ã®ãªã¹ããååŸããŠããŸããããã®äžã«ãããã®è¡ã1ã€ä»¥äžå«ãŸããŠããå ŽåããããŸãã
- $#varã¯ãæååãªã¹ãã®èŠçŽ æ°ãååŸããŠããŸã- $var
- $"varã¯ã- $varæååãªã¹ãã®ãã¹ãŠã®èŠçŽ ã1è¡ã«é£çµãããã®ã§ãïŒã¹ããŒã¹ã§åºåããŸãïŒ
 ; var = 'first str' second ; echo $var first str second ; echo $#var 2 ; echo $"var first str second 
ã芧ã®ãšããã 
$varãš
$"varåºåã¯èŠèŠçã«ç°ãªããŸããã 
echoã¯ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãã¹ããŒã¹ã§è¡šç€ºãã 
$"ã¯å€æ°ã®ãã¹ãŠã®èŠçŽ ãã¹ããŒã¹ã§çµåããããã§ãã ãã ããæåã®
echoã³ãã³ãã¯2ã€ã®ãã©ã¡ãŒã¿ãŒãåãåããæåŸã®ãã©ã¡ãŒã¿ãŒã¯åãåããŸããã
倿°ã®å€ãäœããã®æ¹æ³ã§æé»çã«é£çµãããã³ã«ãã·ã§ã«ã¯é£çµæŒç®å
^æ¿å
¥ããŸãïŒèŠããŠããããã«ãããã¯æååã§ã¯ãªãæååã®ãªã¹ãã§æ©èœããŸãïŒã ããã¯äŸ¿å©ã§ãããç¿æ
£ã§ã¯ãããŸããããäºæããªãããšããããŸãã
 ; flags = abc ; files = file1 file2 ; echo -$flags $files.b -a -b -c file1.b file2.b ; echo { echo -$flags $files.b } {echo -^$flags $files^.b} 
倿°ã®ãªã¹ããžã®å²ãåœãŠãæ©èœããŸãã å³åŽã®ãªã¹ããå·ŠåŽã®å€æ°ãããå€ãã®èŠçŽ ã§æ§æãããŠããå ŽåãæåŸã®å€æ°ã¯ãªã¹ãã®æ®ããåãåããåã®å€æ°ã§ã¯ããããã«1ã€ã®èŠçŽ ããããŸãã
 ; list = abcd ; (head tail) = $list ; echo $head a ; echo $tail bcd ; (xy) = (3 5) ; (xy) = ($y $x) ; echo 'x='^$x 'y='^$y x=5 y=3 
ã¹ã¯ãªãããŸãã¯ã³ãŒããããã¯ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®ãªã¹ãã¯å€æ°
$* ãåã
ã®ãã©ã¡ãŒã¿ãŒã¯å€æ°
$1 ã 
$2 ã...ã«ãããŸãã
ã¹ã³ãŒã
ã³ãŒãã®åãããã¯ã¯ãç¬èªã®ã¹ã³ãŒãã圢æããŸãã æŒç®å
=ããã³
:=ããŠã倿°ã«å€ãå²ãåœãŠãããšãã§ããŸãã 1ã€ç®ã¯ãæ¢åã®å€æ°ã®å€ã倿ŽããããçŸåšã®ã¹ã³ãŒãã«æ°ãã倿°ãäœæããŸãã 2çªç®ã¯åžžã«æ°ãã倿°ãäœæããçŸåšã®ãããã¯ã®çµãããŸã§ããã®ååïŒååšããå ŽåïŒã§å€æ°ã®å€ãå€ãäžæžãããŸãã
 ; a = 1 ; { a = 2 ; echo $a } 2 ; echo $a 2 ; { a := 3; echo $a } 3 ; echo $a 2 ; { b := 4; echo $b } 4 ; echo b is $b b is 
倿°åç
§
倿°åã¯ã 
$æåã®åŸã®è¡ã§ãã ãŸããä»»æã®æååïŒåäžåŒçšç¬ŠãŸãã¯å¥ã®å€æ°ïŒã䜿çšã§ããŸãã
 ; 'var' = 10 ; echo $var 10 ; ref = 'var' ; echo $$ref 10 ; echo $'var' 10 ; echo $('va' ^ r) 10 
ã³ãã³ãåºåã®ã€ã³ã¿ãŒã»ãã
å®éããã®ãããã¯ã¯ã³ãã³ãã®èµ·åã説æããã»ã¯ã·ã§ã³ãããå€ãåç
§ããŠããŸããã話ããŠããããšãæç¢ºã«ããããã«ãæåã«æååã®ãªã¹ããæäœããæ¹æ³ã説æããå¿
èŠããã£ããããä»ãŸã§å»¶æããªããã°ãªããŸããã§ããã
æ§æã®åŒ·èª¿è¡šç€ºãæ°žé ã«å£ããŠããŸãéåžžã«äžå¯Ÿã®åŒçšç¬Šã«äŒããŸãã
- `{}ïŒ- `{}å®è¡ããæååã®ãªã¹ããšããŠstdoutã«åºåãããã®ãè¿ããŸã;ãªã¹ãé 
ç®ã¯- $ifs倿°ã®å€ã䜿çšããŠåºåãããŸã;å®çŸ©ãããŠããªãå Žåã3æåã®æååããããšèŠãªãããŸãïŒã¹ããŒã¹ãã¿ãããã³æ¹è¡ïŒ
- "{}ïŒ- "{}å®è¡ããåºåå
容ãåäžè¡ãšããŠstdoutã«è¿ããŸã-ã³ãã³ããåºåãããã¹ãŠã®è¡ãé£çµããŸãïŒ
äŸãšããŠã 
lsåŒã³åºããä»ããŠãã¡ã€ã«ã®ãªã¹ããããŒãããŸãã ãã¡ã€ã«åã«ã¹ããŒã¹ãå«ãŸããŠããå¯èœæ§ãããããã 
`{}æšæºåäœã¯æ©èœããŸããããªã¹ãé 
ç®ãæ¹è¡ã§åºåãã ãã§ãã
 ; ifs := "{unicode -t 0A} ; files := `{ ls / } ; echo $#files 82 ; ls / | wc -l 82 
ãããå®éã«ã¯ãã·ã§ã«ã«ãã£ãŠãã¡ã€ã«åã®ãªã¹ãã«å±éããããã¡ã€ã«åãã³ãã¬ãŒãã«ãããããç°¡åã§ä¿¡é Œæ§ã®é«ããã®ã«ãªããŸãã
 ; files2 := /* ; echo $#files2 82 
çµã¿èŸŒã¿ã³ãã³ã
çµã¿èŸŒã¿ã³ãã³ãã«ã¯ãéåžžã®ã³ãã³ããšæååã®æäœçšã®2ã€ã®ã¿ã€ãããããŸãã
éåžžã®ã³ãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³/ã¹ã¯ãªããã®èµ·åãšåãæ¹æ³ã§åŒã³åºãããŸãã
 ; run /lib/sh/profile ; load std ; unload std ; exit 
æååãæäœããããã®ã³ãã³ãã¯ã 
${ }ãä»ããŠåŒã³åºãããæšæºã®æååãè¿ããŸãïŒã€ãŸããstdoutã«åºåãããããšãã°ã倿°ã®å€ãžã®ã¢ããŒã«ãè¿ãããŸãïŒã ãããã¯ãéåžžã®ã³ãã³ãã®ãã©ã¡ãŒã¿ãŒã§äœ¿çšãããã倿°ã«å€ãå²ãåœãŠãå³åŽã§äœ¿çšããå¿
èŠããããŸãã ããšãã°ãã³ãã³ã
${quote}ã¯ãæž¡ãããæååã®ãªã¹ãã1è¡ã§
${unquote} ã 
${unquote}ã¯åå¯Ÿã®æäœãå®è¡ããŠã1è¡ãæååã®ãªã¹ãã«å€æããŸãã
 ; list = 'ab' cd ; echo $list abcd ; echo ${quote $list} 'ab' cd ; echo ${unquote ${quote $list}} abcd 
ifãforã颿°ã远å 
ç§ãçŽæããããã«ããããã®éåžžã«å¿
èŠãªãã®ãã裞ã®shãã§å®è£
ããæ¹æ³ã瀺ããŸãã ãã¡ãããå®éã«ã¯ããã¯å¿
èŠãããŸãã
ãstdããŒãå¯èœã¢ãžã¥ãŒã«ã¯å¿
èŠãªãã®ãã¹ãŠãæäŸããããã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãã ããããããã«ããããããããã®å®è£
ã¯ã裞ã®shã®æ©èœã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãšããŠè峿·±ããã®ã§ãã
ãã¹ãŠãæä»çã«äœ¿çšããŠå®è£
ãããŸãïŒ
- 倿°
- è¡ãšè¡ãªã¹ã
- ã³ãŒããããã¯ãšãã®ãã©ã¡ãŒã¿ãŒ
ç§ãã¡ã¯ãæ©èœããå®è¡ããŸã
åè¿°ããããã«ãã·ã§ã«ã³ãã³ãã¯åãªãè¡ã®ãªã¹ãã§ããæåã®è¡ã¯ã³ãã³ãã§ãæ®ãã®è¡ã¯ãã®ãã©ã¡ãŒã¿ãŒã§ãã ãŸããã·ã§ã«ã³ãã³ããããã¯ã¯åãªãæååã§ããã倿°ã«ä¿åã§ããŸãã ãŸããã³ãã³ããããã¯ã¯ãã¹ãŠããã©ã¡ãŒã¿ãŒã
$* ã 
$1ãªã©ã§åãåããŸãã
 ; hello = { echo Hello, $1! } ; $hello World Hello, World! 
ããã«ã颿°åããã°ã©ãã³ã°ã®æé«ã®ç²Ÿç¥ã§é¢æ°ãã«ãªãŒåããããšãã§ããŸãã :)
 ; greet = {echo $1, $2!} ; hi = $greet Hi ; hello = $greet Hello ; $hi World Hi, World! ; $hello World Hello, World! 
å¥ã®äŸ-ãããã¯ãã©ã¡ãŒã¿ãŒã䜿çšããŠãçªå·ã§ç®çã®ãªã¹ãã¢ã€ãã ãååŸã§ããŸãã
 ; list = abcdef ; { echo $3 } $list c 
ããªãã®ããã«
å®è£
ããããšã«èå³ããããæå°éã®æ©èœãå®çŸããå Žåã¯ãæ¬æ ŒçãªäŸ¿å©ãªãã®ãäœæããããšããŸããã§ããã forãå¿
èŠã§ããïŒã«ãŒãã1å忢ããå¿
èŠããããŸããããããè¡ãã®ã«åé¡ãããå Žåã¯äžèŠã§ãïŒã
 ; do = { $* } ; dont = { } ; if = { (cmd cond) := $* { $2 $cmd } $cond $do $dont } ; for = { (var in list) := $* code := $$#* $iter $var $code $list } ; iter = { (var code list) := $* (cur list) := $list (next unused) := $list $if {$var=$cur; $code; $iter $var $code $list} $next } ; $for i in 10 20 30 { echo i is $i } i is 10 i is 20 i is 30 ; 
é¢çœãããããªããš
ããã©ã«ãã§ã¯ãã·ã§ã«ã¯ã¹ã¯ãªããã®èµ·åæã«åå空éããã©ãŒã¯ãããããã¹ã¯ãªããã¯ãããèµ·åããããã»ã¹ã®åå空éã倿Žã§ããŸããã ããã¯ã芪ã®åå空éãæ§æããã ãã®ã¿ã¹ã¯ãæã€ã¹ã¯ãªããã«ã¯é©åããŸããã ãã®ãããªã¹ã¯ãªããã¯
#!/dis/sh -nå§ãŸãå¿
èŠããããŸãã
loadedã
loadedçµã¿èŸŒã¿ã³ãã³ãã¯ãããŒãããããã¹ãŠã®ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®çµã¿èŸŒã¿ã³ãã³ãããªã¹ãããŸãã ãŸãã 
whatisçµã¿èŸŒã¿ã³ãã³ãã¯ã倿°ã颿°ãã³ãã³ããªã©ã«é¢ããæ
å ±ã衚瀺ããŸãã
ã·ã§ã«ã¢ãžã¥ãŒã«ã®ãªã¹ãã䜿çšããŠå€æ°
$autoloadãäœæãããšããããã®ã¢ãžã¥ãŒã«ã¯èµ·åãããåã·ã§ã«ã«èªåçã«ããŒããããŸãã
ã·ã§ã«ã«ã¯æ§æç³ã®ãµããŒãããããŸãïŒ 
&&ããã³
|| ã ãããã®æŒç®åã¯bare shã§äœ¿çšã§ããŸãããçµã¿èŸŒã¿ã®
andããã³
orã³ãã³ãã®åŒã³åºãã«å€æãããŸãããããã¯bare shã§ã¯ãªãã 
stdã¢ãžã¥ãŒã«ããã®ãã®ã§ãïŒãããã£ãŠã 
&&ããã³
||ã¯
load stdåŸã«ã®ã¿äœ¿çšã§ããŸãïŒã
 ; echo { cmd && cmd } {and {cmd} {cmd}} ; echo { cmd || cmd } {or {cmd} {cmd}} 
Limboã§äœæãããã¢ããªã±ãŒã·ã§ã³ã¯ãããšãã°ãã³ãã³ãã©ã€ã³ãã©ã¡ãŒã¿ãŒã§éå§ãããšããshã³ãã³ãã®ãããã¯ãå«ãè¡ã¯ã 
shïŒ2ïŒã¢ãžã¥ãŒã«ã䜿çšããŠéåžžã«ç°¡åã«å®è¡ã§ããŸãã
倿°ãšè¡ãªã¹ãã䜿çšããã·ã§ã«ã®äœæ¥ã¹ã¿ã€ã«ã¯ãåŸæ¥ã®ã·ã§ã«ãšã¯ç°ãªããæåã«èšåããããšãã«ã倿°ã®ãã©ã¡ãŒã¿ãŒãšå€ãäžåºŠã ãã·ãŒã«ãããããšãèããå¿
èŠããããšããäºå®ã«ã€ãªãããŸãã ãããŠãããããæã£ãŠããã·ã³ãã«ãèããããšãªãã奜ããªå Žæã«ãããã転éã§ããŸãã
ãŸãšã
ãã®çãèšäºã¯ãã€ã³ãã§ã«ãã¢ã³ã·ã§ã«ã®ã»ãŒå®å
šãªãªãã¡ã¬ã³ã¹ã¬ã€ãã§ãã ã€ãŸããåºæ¬çãªã·ã§ã«ã®ãã¹ãŠã®æ©èœã詳现ã«ããããŠãã¹ãŠã®ãã¥ã¢ã³ã¹ãšäŸãšãšãã«èª¬æãããŠããŸãã 
sh(1) , , 
$apid , 
$prompt , - , 
sh ., .
/, :
! «» , , if for ( , raise 
std â .. 
/bin/false :) 
run ).
, . , 
sh-std(1) :
- ( and,or,if)
- ( !,~,no)
- ( apply,for,while,getlines)
- äž¡æ¹ã®ã¿ã€ãã®é¢æ°ïŒfnãsubfnïŒ
- äŸå€ãšã¹ããŒã¿ã¹ãšã®ä»äºïŒraiseãrescueãstatusïŒ
- äœæ¥åãããã³ãªã¹ãïŒ${hd}ã${tl}ã${index}ã${split}ã${join}ïŒ
- ãªã©
ãããããããã®è¿œå ã³ãã³ãã¯ãã¹ãŠãã·ã§ã«èªäœã®æ§æãè€éã«ãããã®ã§ã¯ãªããåçŽã§ãšã¬ã¬ã³ããªãŸãŸã§ãïŒ