Next: , Previous: File System Conventions, Up: Portable Shell   [Contents][Index]


10.5 ¥·¥§¥ë¤ÎÂåÆþ

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: , Previous: File System Conventions, Up: Portable Shell   [Contents][Index]