チケット #21676

関数内での $LINENO の値

登録: 2010-05-10 00:16 最終更新: 2010-06-03 23:13

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし
投票
点数: 0
No votes
0.0% (0/0)
0.0% (0/0)

詳細

関数の中で $LINENO の値を参照したときの値が他のシェルと異なる。入力がスクリプトファイルでないとき、関数の中では、この変数の値は関数の中身における現在の行数とならなければならない。

チケットの履歴 (3 件中 3 件表示)

2010-05-10 00:16 更新者: magicant
  • 新しいチケット "関数内での $LINENO の値" が作成されました
2010-06-03 22:37 更新者: magicant
コメント

調べてみると、シェルによって「関数内」と見なすか「スクリプト内」と見なすか (あるいは「それ以外」と見なすか) の差が激しいようだ。(そもそも $LINENO をサポートしないシェルもある)

Yash では、ksh に倣って以下のように動作することとする。

  • スクリプト内では、$LINENO は常にそのスクリプトファイル全体における行数となる。これには、対話シェルへの標準入力以外の全ての入力が当てはまる。
  • 対話シェルへの標準入力は、一回コマンドを実行するたびに $LINENO の値を 1 にリセットする。この挙動の結果は、必ずしも POSIX の規定する「関数の中における行番号」に一致しない (下例参照) が、実装のしやすさと、(POSIX の元になったシェルである) ksh の挙動がそもそもこうなっていることから、このようにする。
    {
    \
    func () {
    echo $LINENO  # 4
    }
    }
    
2010-06-03 23:13 更新者: magicant
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2010-06-03 23:13 に更新されました
コメント

r2009 (と r2010) で対応。

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする