0

userTypeが変更されない理由がわかりません。

確かにdetermineTypeに到達していることはわかっていますが、後でuserTypeを出力しようとしても、値が「bbb」に変更されていません。

userType="aaa"

function determineType {
    userType="bbb"
}

function checkUser {
    cat users.csv | \
    while read userLine; do
        if [[ $userLine =~ .*$user.* ]]
            then
            determineType
            echo "1"
        fi
    done
    echo "0"
}
4

2 に答える 2

2

パイプを使用しています。パイプは、サブシェルでwhileを起動します。サブシェル内の変数の値を変更しても、元の変数には影響しません

次のものを交換する必要があります。

function checkUser {
    cat users.csv | \
    while read userLine; do
        if [[ $userLine =~ .*$user.* ]]
            then
            determineType
            echo "1"
        fi
    done
    echo "0"
}

function checkUser {
    while read userLine; do
        if [[ $userLine =~ .*$user.* ]]
            then
            determineType
            echo "1"
        fi
    done < users.csv
    echo "0"
}

(これは猫の役に立たない使用も取り除きます)

于 2012-11-26T13:35:20.797 に答える
2

soulseekahがコメントで述べたように、whileループはサブシェルで実行されます。代わりに、実行してください(そして、利点として、猫の無駄な使用を取り除きます):

userType="aaa"

determineType() {
    userType="bbb"
}

checkUser() {
    while read userLine; do
        if [[ $userLine = *$user* ]]; then
            determineType
            return 1
        fi
    done < users.csv
    return 0
}

ノート。また、いくつか変更しました。

  • 同じことがグロブで達成できるので、役に立たない正規表現を取り除きました、
  • bashで関数を定義するためのより一般的な方法を使用しました。
  • return値を返す代わりに使用されechoます。:で同じ問題が再び発生しechoます。おそらく、別のサブシェルで関数checkUserを使用して、によって返される値を取得しますecho
于 2012-11-26T13:40:04.903 に答える