2008年1月24日

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

えらそーにかきつつ : を見落としている いしおかです. 駄目駄目です.

件のスクリプトは 「:」 が抜けてるバグがあるんでしょう.

で 動きを考えた時に, 第一引数に '' を渡すと以降のパラメータを無視して
起動する... のでなければ $@ でいいですよね.
# 渡したいのは $@ であって 今回は $@ で全然問題がないように見えます.

--
(ishi) firefox は "$@" ですな.


>> On Thu, 24 Jan 2008 18:39:33 +0900, "Shinnosuke Kimura" <skimura@xxxxx> said:

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

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

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

Shinnosuke> "$prog" "$@"

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

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

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

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

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

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

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


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




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