この local ですが、、、 ビルトインコマンドだったとは…(´д`) これを知らずに6時間ぐらい無駄にしたよー(´д`)
こんな感じ。ファイル名は適当にaa.sh。
#!/bin/sh function hoge() { rt=`mkdir /dev/null` echo [$?] } echo start hoge echo endで、実行
$ ./aa.sh start mkdir: cannot create directory `/dev/null': File exists [1] end $
これは想定どおり。$?に1が入りますね。
ここで、変数 rt を local 宣言(実はコマンド)します。
で、実行。
その他、bashのlocalは、「localを実行した変数は、その関数内だけでなく、その関数が呼び出す関数でも有効」という妙なスコープになっているとのこと。
気をつけましょう(´ー`)
ここで、変数 rt を local 宣言(実はコマンド)します。
#!/bin/sh
function hoge() {
local rt=`mkdir /dev/null`
echo [$?]
}
echo start
hoge
echo end
で、実行。
0] end $
えええええー。 $? が 0、つまり正常終了じゃないですかああああ┐(´д`)┌
無知とは怖いものです。localコマンドの実行で$?が0になってるんですなあ・・・たぶん。
この混乱で、∀ガンダム10話観れるぶんの時間無駄にしたわ。死ぬわー
次のようにすれば目的は達せる、と。
無知とは怖いものです。localコマンドの実行で$?が0になってるんですなあ・・・たぶん。
この混乱で、∀ガンダム10話観れるぶんの時間無駄にしたわ。死ぬわー
次のようにすれば目的は達せる、と。
local rt rt=`mkdir /dev/null` echo [$?] } echo start hoge echo end
その他、bashのlocalは、「localを実行した変数は、その関数内だけでなく、その関数が呼び出す関数でも有効」という妙なスコープになっているとのこと。
気をつけましょう(´ー`)
0 件のコメント:
コメントを投稿