ハードなソフトの話

アクセスカウンタ

zoom RSS バッチファイルとシェルスクリプトの内部サブルーチン

<<   作成日時 : 2013/08/29 22:02   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

前回に引き続き、バッチファイルとシェルスクリプトの話。今回はサブルーチンについて。

バッチにしろシェルにしろ、やっつけ仕事なのだから、サブルーチンを作らない人は多いようだ。

しかし、そのつもりはなくても、スクリプトファイルが巨大化してしまったら、やっぱり、サブルーチンが使いたい。

ついでにローカル変数も使いたい。例によって、表にしてみた。

用途 Windowsバッチ(CMD) UNIXシェル(bash)
サブルーチン(関数)
の定義と呼び出し
@echo off
call :func_1
goto :eof

:func_1
    echo hello
goto :eof
function func_1(){
  echo hello
}

func_1
ローカル変数 @echo off
set lv=abc
call :func_1
echo %lv%
goto :eof

:func_1
    setlocal
    set lv=hello
    echo %lv%
    endlocal
goto :eof

function func_1(){
    local lv
    lv=hello
    echo $lv
}

lv=abc
func_1
echo $lv

引数を渡す

call :func_2 a b c
goto :eof

:func_2
   echo %1 %2 %3
goto :eof

function func_2(){
    echo $1 $2 $3
}

func_2 a b c

サブルーチン(関数)から戻り値を返す
(半分インチキ)

@echo off
echo @echo this is ret > func_4.bat
setlocal EnableDelayedExpansion
for /f "tokens=*" %%f in (`call func_4.bat`) do set rtn=%%f
echo !rtn!
goto :eof

function func_4() {
  echo "this is ret"
}
rtn=`func_4`

echo "rtn=${rtn}"

バッチ(CMD)で、サブルーチンから戻り値を返す方法はインチキである。

バッチファイル内のサブルーチンを呼び出す方法が思いつかなかったので、func_4.batというファイルを作成して、

call で呼び出した。

ここまで複雑化したら、書き直したほうがいいか?

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
バッチファイルとシェルスクリプトの内部サブルーチン ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる