- PR -

setコマンドの「set -- $変数名」の意味について

1
投稿者投稿内容
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2006-11-08 16:52
お世話になっております。
シェルスクリプト(sh)について質問させて下さい。
CSVファイルを処理するのにWebで拾ったサンプルを参考に以下のスクリプトを書きました。

Webやmanで調べ、setコマンドが引数で指定されたコマンドの実行結果を位置パラメータ($1、$2...)へ設定してくれる、という事は理解できました。またIFSの設定がコマンドの引数のセパレータを設定している事も理解できました。

「set -- $LINE」の「--」は何を意味するのでしょうか?manや「set --」をgoogleやここで探してみましたが分かりませんでした。「--」を取るとどうなるかと思い試したところ無くても位置パラメータにデータが設定され、実は不要なのかなと思っています。

コード:

#!/bin/sh
OLDIFS=IFS
while read LINE; do
IFS=,
set -- $LINE
if [ -z "" ]; then
IFS=$OLDIFS
echo "error line [$LINE]" 1>&2
fi
done



尚、コードのほとんどが参照元記事URLから頂いています。

[ メッセージ編集済み 編集者: ryuuji 編集日時 2006-11-08 16:56 ]

[ メッセージ編集済み 編集者: ryuuji 編集日時 2006-11-08 18:00 ]
鰹武士
会議室デビュー日: 2006/11/08
投稿数: 5
投稿日時: 2006-11-08 17:01
set -- $LINE というのは、$LINEという環境変数に「--」を入れるということです。

おそらく何か意味があるのだと思います。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-11-08 17:07
Linuxはどうか知りませんが、BSD系だと「man sh」に以下のような記述があります。
引用:

set [{ -options | +options | -- }] arg ...
...
The third use of the set command is to set the values of the
shell's positional parameters to the specified args. To change
the positional parameters without changing any options, use ``--''
as the first argument to set. If no args are present, the set
...



「--」がない場合、$LINE が例えば「-x 」という文字列で開始された場合にオプション変更だと解釈されてしまいます。これを防ぐために、「--」を入れて「これ以降はオプション設定ではない」と明示します。
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2006-11-08 17:59
鰹武士様、スフレ様返信ありがとうございます。

納得しました。シェルはhpuxのshをしていましたのでsh-posix(1)の特殊コマンドのset項を読んだところスフレ様に示して頂いた通りのことが書かれているようです。

ありがとうございました。

引用:

-- オプションを変更しません。パラメータ 1 を - で始まる値に設定する際に有用です。このオプションの後に引き数がなければ、位置パラメータは設定されません。

1

スキルアップ/キャリアアップ(JOB@IT)