Next: Assignments, Previous: File System Conventions, Up: Portable Shell [Contents][Index]
persistent urban legend¤È¤ÏÈ¿ÂФˡ¤Bourne¥·¥§¥ë¤ÏÊÑ¿ô¤È¥Ð¥Ã¥¯¥¯¥ª¡¼¥È¤µ
¤ì¤Æ¤¤¤ë¼°¤¬À°Á³¤Èʬ¤«¤ì¤Æ¤ª¤é¤º¡¤ÆÃ¤Ë±¦Â¦¤Î³ä¤êÅö¤Æ¤Ècase
¤Î°ú¿ô
¤¬¤½¤¦¤Ç¤¹¡¥Î㤨¤Ð¡¤°Ê²¼¤Î¥³¡¼¥É¤ò¹Í¤¨¤Þ¤¹¡¥
case "$given_srcdir" in .) top_srcdir="`echo "$dots" | sed 's,/$,,'`" *) top_srcdir="$dots$given_srcdir" ;; esac
°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤È¡¤¤è¤êÆÉ¤ß¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡¥
case $given_srcdir in .) top_srcdir=`echo "$dots" | sed 's,/$,,'` *) top_srcdir=$dots$given_srcdir ;; esac
¤½¤·¤Æ¡¤¼ÂºÝ¤½¤ì¤Ï¤è¤ê°Ü¿¢À¤¬¹â¤¯¤Ê¤ê¤Þ¤¹¡¥ºÇ½é¤Î»î¤ß¤ÎºÇ½é¤Î
case¤Ç¡¤Á´¤Æ¤Î¥·¥§¥ë¤¬"`…"…"…`"
¤òÀµ¤·¤¯²ò¼á¤¹¤ë
¤ï¤±¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¤top_srcdir
¤Î·×»»·ë²Ì¤Ï°Ü¿¢À¤¬¹â¤¯¤¢¤ê¤Þ¤»¤ó¡¥
¹¹¤Ë°¤¤¤³¤È¤Ë¤Ï¡¤Æ±ÍͤË"`…\"…\"…`"
¤òÁ´¤Æ¤Î¥·¥§
¥ë¤¬²ò¼á¤¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥Æó½Å°úÍÑÉä¤Ç¥Ð¥Ã¥¯¥¯¥ª¡¼¥È¤µ¤ì¤Æ¤¤¤ë¼°¤Î
ÆâÉô¤Ç¡¤Æó½Å°úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿Ê¸»úÎó¤ò»ÈÍѤ¹¤ë¤¿¤á¤Î°Ü¿¢À¤ò¹â¤á¤ëÊýË¡¤ÏÁ´
¤¯¤¢¤ê¤Þ¤»¤ó(pfew!)¡¥
$@
ºÇ¤âÍ̾¤Ê¥·¥§¥ë¤Î°Ü¿¢À¤ÎÌäÂê¤Î°ì¤Ä¤Ï¡¤‘"$@"’¤È¤Î´ØÏ¢¤Ç¤¹¡¥°ÌÃÖ¤Ë °Í¸¤¹¤ë°ú¿ô¤¬Ìµ¤¤¤È¤¡¤POSIX¤Ç¤Ï‘"$@"’¤ò²¿¤â¤Ê¤¤¤³¤È¤È Åù²Á¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¤¥ª¥ê¥¸¥Ê¥ë¤ÎUnix¥Ð¡¼¥¸¥ç¥ó7¤ÎBourne¥·¥§¥ë¤Ï¤½¤ÎÂå ¤ï¤ê¤Ë‘""’¤È¤·¤Æ°·¤¤¡¤¤³¤Îưºî¤ÏDigital Unix 5.0¤Î¤è¤¦¤Ë¤½¤ì°Ê¹ß¤Î ¼ÂÁõ¤Ç¤âÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡¥
¤³¤Î°Ü¿¢À¤ÎÌäÂê¤ò²óÈò¤¹¤ëÅÁÅýŪ¤ÊÊýË¡¤Ï¡¤‘${1+"$@"}’¤ò»ÈÍѤ¹¤ë ¤³¤È¤Ç¤¹¡¥»Äǰ¤Ê¤¬¤é¡¤¤³¤Î¼êË¡¤ÏMac OS X¤Ç¤â»ÈÍѤµ¤ì¤Æ¤¤¤ë¡¤Zsh (3.x ¤È 4.x)¤Ç¤Ïưºî¤·¤Þ¤»¤ó¡¥Bourne¥·¥§¥ë¤ò¥¨¥ß¥å¥ì¡¼¥È¤·¤Æ¤¤¤ë¤È¤¡¤Zsh¤Ï ‘${1+"$@"}’¤Çñ¸ì¤ÎʬΥ¤ò¼Â¹Ô¤·¤Þ¤¹¡¥
zsh $ emulate sh zsh $ for i in "$@"; do echo $i; done Hello World ! zsh $ for i in ${1+"$@"}; do echo $i; done Hello World !
Zsh¤Ï¡¤¥×¥ì¡¼¥ó¤Î‘"$@"’¤ò¤ª¤½¤é¤¯½èÍý¤·¤Þ¤¹¤¬¡¤¾åµ¤Î°Ü¿¢À¤ÎÌäÂê ¤Î¤¿¤á¡¤¥×¥ì¡¼¥ó¤Î‘"$@"’¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡¥²óÈò¤¹¤ëÊýË¡¤Î °ì¤Ä¤Ï¡¤‘${1+"$@"}’¤ò‘"$@"’¤ËÊÑ´¹¤¹¤ëZsh¤Î“global aliases”¤Ë°Í¸¤·¤Þ¤¹¡¥
test "${ZSH_VERSION+set}" = set && alias -g '${1+"$@"}'='"$@"'
¤è¤êÊݼéŪ¤Ê²óÈòÊýË¡¤Ï¡¤°ÌÃ֤˰͸¤¹¤ë°ú¿ô¤òÍѤ¤¤Ê¤¯¤Æ¤âÎɤ¤¸Â¤ê¡¤ ‘"$@"’¤òÈò¤±¤ë¤³¤È¤Ç¤¹¡¥Î㤨¤Ð¡¤°Ê²¼¤ÎÂå¤ï¤ê¤ò¹Í¤¨¤Þ¤¹¡¥
cat conftest.c "$@"
¤³¤ÎÂå¤ï¤ê¤Ë°Ê²¼¤ò»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
case $# in 0) cat conftest.c;; *) cat conftest.c "$@";; esac
${var:-value}
Ultrix sh
¤ò´Þ¤á¡¤¸Å¤¤BSD¥·¥§¥ë¤Ï¥·¥§¥ë¤ÎÂåÆþ¤ËÂФ·¤Æ¥³
¥í¥ó¤ò¼õ¤±Æþ¤ì¤º¡¤Ê¸¶ç¤ò¸À¤Ã¤Æ½ªÎ»¤·¤Þ¤¹¡¥
${var=literal}
°úÍÑÉä¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Î¤«¤á¤Æ¤¯¤À¤µ¤¤¡¥
: ${var='Some words'}
¤½¤ì°Ê³°¤ÎDigital Unix V 5.0¤Î¤è¤¦¤Ê¥·¥§¥ë¤Ç¤Ï¡¤“bad substitution”¤Î¤¿ ¤á¤Ë½ªÎ»¤·¤Þ¤¹¡¥
Solaris¤Î/bin/sh
¤Ë¤Ï¤³¤Î²ò¼á¤Ë¶²¤í¤·¤¤¥Ð¥°¤¬¤¢¤ê¤Þ¤¹¡¥ÊÑ¿ô¤ò
‘}’¤ò´Þ¤àʸ»úÎó¤ËÀßÄꤹ¤ëɬÍפ¬¤¢¤ë¤³¤È¤òÁÛÁü¤·¤Æ¤¯¤À¤µ¤¤¡¥¤³¤Î
‘}’ʸ»ú¤Ç¡¤±Æ¶Á¤¢¤ëÊÑ¿ô¤¬´û¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È¤¡¤Solaris¤Î
/bin/sh
¤Ïº®Í𤷤ޤ¹¡¥¤³¤Î¥Ð¥°¤Ï¡¤°Ê²¼¤Î¤è¤¦¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤Çºî
ư¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¡¥
$ unset foo $ foo=${foo='}'} $ echo $foo } $ foo=${foo='}' # no error; this hints to what the bug is $ echo $foo } $ foo=${foo='}'} $ echo $foo }} ^ ugh!
‘}’¤Ï¡¤¥·¥ó¥°¥ë°úÍÑÉä¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ç¤â¡¤‘${’¤Ë°ìÃפ¹¤ë ¤â¤Î¤È¤·¤Æ²ò¼á¤µ¤ì¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡¥Æó½Å°úÍÑÉä¤ò»ÈÍѤ¹¤ë¤ÈÌäÂê¤ÏÀ¸¤¸¤Þ¤»¤ó¡¥
${var=expanded-value}
Ultrix¤Ç¡¤°Ê²¼¤ò¼Â¹Ô¤·¤¿¤È¤·¤Þ¤¹¡¥
default="yu,yaa" : ${var="$default"}
¤½¤ì¤Ïvar¤ò‘M-yM-uM-,M-yM-aM-a’¤ËÀßÄꤷ¡¤¤¹¤Ê¤ï¤Á¡¤Á´¤Æ¤Îʸ»ú ¤ÎȬÈÖÌܤΥӥåȤ¬¥»¥Ã¥È¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡¥‘$var’¤òŸ³«¤¹¤ë¤È¤¡¤¥·¥§ ¥ë¤¬È¬ÈÖÌܤΥӥåȤòÌÀ¼¨Åª¤Ë¥ê¥»¥Ã¥È¤¹¤ë¤Î¤Ç¡¤Ã±½ã¤Ë‘echo $var’¤ò»È ÍѤ·¤Æ¤¤¤ë¸½¾Ý¤¬Ê¬¤«¤ê¤Þ¤»¤ó¡¥¤³¤Î¥·¥§¥ë¤Ë¤½¤Î°ãÈ¿¤Çº®Í𤵤»¤ëÆó¤Ä¤ÎÊýË¡ ¤Ï¡¤°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡¥
$ cat -v <<EOF $var EOF
¤½¤ì¤È°Ê²¼¤Ç¤¹¡¥
$ set | grep '^var=' | cat -v
¤³¤Î¥Ð¥°¤Î¸ÅŵŪ¤Çŵ·¿Åª¤Ê¤â¤Î¤Î°ì¤Ä¤Ï°Ê²¼¤Î¤â¤Î¤Ç¤¹¡¥
default="a b c" : ${list="$default"} for c in $list; do echo $c done
ñ°ì¹Ô¤Ë‘a b c’¤òÆÀ¤ë¤Ç¤·¤ç¤¦¡¥¤Ê¤¼¤Ç¤·¤ç¤¦¤«¡©¤½¤ì¤Ï¡¤‘$list’ ¤Ë¥¹¥Ú¡¼¥¹¤¬Ìµ¤¤¤¿¤á¤Ç¤¹¡¥‘M- ’¡¤¤¹¤Ê¤ï¤ÁȬ¥Ó¥Ã¥ÈÌܤòÀßÄꤹ¤ë¥¹¥Ú¡¼ ¥¹¤¬¤¢¤ë¤Î¤Ç¡¤IFS¤Ë¤è¤ëʬΥ¤¬¼Â¹Ô¤µ¤ì¤Ê¤¤¤Î¤Ç¤¹¡ª¡ª¡ª
Îɤ¤¥Ë¥å¡¼¥¹¤Î°ì¤Ä¤Ï¡¤Ultrix¤¬‘: ${list=$default}’¤ÇÀµ³Î¤Ëưºî¤¹ ¤ë¤³¤È¤Ç¤¹¡¥¤¹¤Ê¤ï¤Á¡¤°úÍÑÉä¤Ç°Ï¤Þ¤Ê¤¤¾ì¹ç¤Ç¤¹¡¥°¤¤¥Ë¥å¡¼¥¹¤È¤· ¤Æ¤Ï¡¤QNX 4.25¤Ï¡¤list¤òdefault¤ÎºÇ¸å¤Î¹àÌÜ ¤ËÀßÄꤹ¤ë¤³¤È¤Ç¤¹¡ª
°Ü¿¢À¤Î¹â¤¤ÊýË¡¤Ï¡¤Ultrix¤ÇȬÈÖÌܤΥӥåȤòÆó²óÀÚÂØ¤¨¤ë¤¿¤á¤Ë¡¤Æó½Å(°ú ÍÑÉä¤Ë¤è¤ë)ÂåÆþ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¤¹¡¥
list=${list="$default"}
…¤·¤«¤·¡¤Solaris¤Î‘}’¤Î¥Ð¥°(¾åµ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¤Ë¤ÏÍÑ¿´ ¤·¤Æ¤¯¤À¤µ¤¤¡¥°ÂÁ´¤Ë¤¹¤ë¤Ë¤Ï¡¤°Ê²¼¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥
test "${var+set}" = set || var={value}
`commands`
°ìÈÌŪ¤Ë¤Ï°ÕÌ£¤¬¤¢¤ê¤Þ¤»¤ó¤¬¡¤Ash 0.2¤Ç¤ÏºÇŬ²½¤Î¤¿¤á¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤¹¤ë ¤¿¤á¥µ¥Ö¥·¥§¥ë¤òfork¤·¤Ê¤¤¤Î¤Ç¡¤ÉûºîÍѤΤ¢¤ëñ°ì¤ÎÁȤ߹þ¤ßʪ¤òÂåÆþ¤·¤Ê¤¤ ¤Ç¤¯¤À¤µ¤¤¡¥
Î㤨¤Ð¡¤cd
¤¬²¿¤â½ÐÎϤ·¤Ê¤¤¤³¤È¤òÄ´ºº¤·¤¿¤¤¾ì¹ç¡¤°Ê²¼¤Î¤³¤È¤¬À¸
¤¸¤ë¤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç¡¤‘test -z "`cd /`"’¤ò»ÈÍѤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡¥
$ pwd /tmp $ test -z "`cd /`" && pwd /
‘foo=`exit 1`’¤Î·ë²Ì¤Ï¡¤ÆÉ¼Ô¤Ø¤Î±é½¬ÌäÂê¤È¤·¤Æ»Ä¤·¤Æ¤ª¤¤Þ¤¹¡¥
$(commands)
¤³¤Î¹½À®¤Ï¡¤‘`commands`’¤òÃÖ´¹¤¹¤ë¤È¤¤¤¦°ÕÌ£¤¬¤¢¤ê¤Þ¤¹¡¥¤½¤ì ¤é¤òÆþ¤ì»Ò¾õ¤Ë¤¹¤ë¤³¤È¤Ï²Äǽ¤Ç¤¹¤¬¡¤¥Ð¥Ã¥¯¥¯¥ª¡¼¥È¤òÍѤ¤¤Æ°Ü¿¢¤¹¤ë¤³¤È¤Ï ÉÔ²Äǽ¤Ç¤¹¡¥»Äǰ¤Ê¤¬¤é¡¤¤Þ¤ÀÁ´ÂÎŪ¤Ë¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡¥ÆÃ¤Ë¡¤¸½ºß¤Î Solaris¥ê¥ê¡¼¥¹¤Ç¤â¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡¥
$ showrev -c /bin/sh | grep version Command version: SunOS 5.8 Generic 109324-02 February 2001 $ echo $(echo blah) syntax error: `(' unexpected
¤Þ¤¿¡¤IRIX 6.5¤ÎBourne¥·¥§¥ë¤â¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡¥
$ uname -a IRIX firebird-image 6.5 07151432 IP22 $ echo $(echo blah) $(echo blah)
‘$(commands)’¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¤°Û¤Ê¤ëɽµÊýË¡ ‘$((expression))’¤Ï¸½ºß¤Î¥·¥§¥ë¤Ç¤Ï¥³¥Þ¥ó¥É¤Ç¤Ï¤Ê¤¯¿ô¼°¤À¤È´ª °ã¤¤¤¹¤ë¤Î¤Ç¡¤¥³¥Þ¥ó¥É¤¬¥«¥Ã¥³¤Ç»Ï¤Þ¤é¤Ê¤¤¤è¤¦¤Ë³Î¤«¤á¤Æ²¼¤µ¤¤¡¥¤³¤Î´ª°ã ¤¤¤òÈò¤±¤ë¤¿¤á¡¤Æó¤Ä¤Î³«¥«¥Ã¥³¤Î´Ö¤Ë¤Ï¥¹¥Ú¡¼¥¹¤òÁÞÆþ¤·¤Æ²¼¤µ¤¤¡¥
Next: Assignments, Previous: File System Conventions, Up: Portable Shell [Contents][Index]