[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00140] Re: ${} について



 しらいです。

In Message-Id <y7d1y09vboj.wl@tomokuni.my.email.ne.jp>
        Tetsuo Tomokuni <tomokuni@my.email.ne.jp>さんwrites:
> 友國です。

> 仕事でいろいろやっていて気がついたのですが、
> ${} の処理が以下のようになっています。

 この辺りは POSIX でも明確な規定が無く、Bourne shell の中で
も version によって微妙に挙動が異なったりするので、可能な限
りは Bourne shell の挙動に近付けていますが、最終的には自分の
使い易い挙動に落ち着けてしまっています。


> fdsh-2.00a$ eval echo "\"\${hoge:-hoge \\\${fuga}\\\${piyo}hoge_fuga_piyo}\""
> hoge ${fuga}${piyo}hoge_fuga_piyo
> 
> fdsh-2.03$ eval echo "\"\${hoge:-hoge \\\${fuga}\\\${piyo}hoge_fuga_piyo}\""
> hoge \\\\hoge_fuga_piyo

> fdsh-2.00a$ eval echo "\"\${hoge:-hoge \\\${fuga\}\\\${piyo\}hoge_fuga_piyo}\""
> hoge ${fuga\}${piyo\}hoge_fuga_piyo
> 
> fdsh-2.03$ eval echo "\"\${hoge:-hoge \\\${fuga\}\\\${piyo\}hoge_fuga_piyo}\""
> "${hoge:-hoge \\${fuga\}\\${piyo\}hoge_fuga_piyo}": bad substitution

 この辺りの差異は下記 patch で 2.00a の側に落ち着くと思いま
す。

---- Cut Here ----
diff -u FD-2.03/pathname.h ./pathname.h
--- FD-2.03/pathname.h	Wed Mar 26 00:00:00 2003
+++ ./pathname.h	Fri Apr 11 20:12:40 2003
@@ -13,7 +13,7 @@
 #define	PATHDELIM	':'
 #define	PMETA		META
 #define	METACHAR	"\t\n !\"#$&'()*;<=>?[\\]`|"
-#define	DQ_METACHAR	"\"$`"
+#define	DQ_METACHAR	"\"$\\`"
 #else	/* MSDOS */
 # ifdef	_NOORIGSHELL
 # define	FAKEMETA
@@ -24,7 +24,7 @@
 # else
 # define	PMETA		'%'
 # define	METACHAR	"\t\n !\"#$%&'()*;<=>?[]`|"
-# define	DQ_METACHAR	"\"$`"
+# define	DQ_METACHAR	"\"$%`"
 # define	PATHDELIM	':'
 # endif
 #endif	/* MSDOS */
---- Cut Here ----

 これを直すことで、また別のところで仕様変更になってしまう箇
所が出てしまいますが、弊害の度合を考えるとこの patch を適用
した方がいいかも知れません。
 この変更は 2.01c -> 2.02 の時に行なったもので、それで 2.00
と 2.03 とで挙動が異なる訳ですが、次の relase で元に戻してお
きますね。


> 上記の結果を得ましたが、 FD-sh の Bug なのかどうか、
> よく分かっておりません。;-)

 何をして bug と呼ぶかでしょうね。Bourne shell 互換を謳って
いるので、Bourne shell と異なる挙動は全て bug と見なしても構
いはしないのですが、流石に 100% の互換性は実装出来そうにあり
ません。

                                               しらい たかし