2008年1月24日

[linux-users:107903] Re: [linux-users:107901] Re: シェル ${1+"$@"} とは?

木村と申します。

質問者は run-mozilla.sh: line 131 のセグメンテーション違反で
"$prog" ${1+"$@"} とかを調べているのだろうかと気になりました。

私も sh-posix のマニュアル見て同じ事を考えていてishiokaさん
の説明と同じようなことを考えました。でも良く分からなくなりました。

$1 が空なら"$@" は置き換えられず空のまま "$prog" が起動しますが、
$1 が空でなければ "$@" に置き換えられるのだけど、:(コロンが)ない
から実際には置き換えられないので $1 が空でも "$@" はそのまま。
なんで最初から

"$prog" "$@"

としないのでしょうか。たとえば、

$ cat hoge.sh
#!/bin/sh
prog="./hoge2.sh"
echo "$@"
"$prog" ${1+"$@"}
echo $?

$ cat hoge2.sh
#!/bin/sh
echo "$@""<ok?>"

$ ./hoge.sh "" a b c
a b c
a b c<ok?>
0

ここで "$prog" ${1+"$@"} のところを ${1:+"$@"} に書き換えたら

$ ./hoge.sh '' a b c
a b c
<ok?>
0

となってちゃんと $2 以降が使われない。
だから、意味がないような気がするので不思議なのです。


投稿者 xml-rpc : 2008年1月24日 18:39
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/68956
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。