2017-07-25 2 views
1

スクリプトは機能しますが、 "tmp"を使用せずに同じ結果を得る方法はありますか?変数を読み込み、関数内で引数として渡す別の方法

おかげ

function ask_version() { 
while true ; do 
echo -e "Give the version of" $1 
local tmp=$2 
read -r tmp 

    if [[ ! $tmp =~ ^[0-9]$ ]] ; then 
    echo -e "Please respect number format" 
    elif [[ $tmp -ne $t ]] ; then 
    echo -e "It is not the true number" 
    else 
    return 0 
    fi 
done 
} 

ask_version "APP1" "APP1VERSION" 
ask_version "APP2" "APP2VERSION" 
+0

変数の使用には何が問題なのですか? –

+0

$ 2を使用してtmpを一緒に設定することはできませんか? –

+0

@Raman $ 2を使用しようとしましたが動作しませんでした –

答えて

1

ここで私は後にあなたがいると思うものの機能的なバージョンです:それはtmp変数を使用していない

function ask_version() { 
while true ; do 
echo -e "Give the version of $1" 
read -r 

    if [[ ! $REPLY =~ ^[0-9]$ ]] ; then 
    echo -e "Please respect number format" 
    elif [[ $REPLY -ne $2 ]] ; then 
    echo -e "It is not the true number" 
    else 
    return 0 
    fi 
done 
} 

ask_version "APP1" 5 
ask_version "APP2" 6 

は、その代わりにreadのデフォルト変数REPLYに依存し、それを関数の第2のパラメータ$2と比較します。これは静的文字列ではなく実際の数値として渡します。おそらく代わりに変数を使うつもりだったでしょうか?

ask_version "APP1" "$APP1VERSION" 
ask_version "APP2" "$APP2VERSION" 
+0

はい、これらの変数は後で使用したいと思います。私は解決策を見つけたので、 "-r"を$ 2で、$ REPLYを$ [$ 2]で置き換えました! –

+0

ユーザの入力を変数に保存し、その関数が$ REPLYをエコーバックし、その関数を次のように呼び出すようにするには: 'APP1VERSION = $(ask_version APP1)' –

+0

これは私が必要とするものではありません。私は私のコードをプッシュするためにもう一度答えます –

0

したがって、競合を避けるために、変数は$ 2または$ REPLYのいずれかである必要があります。 $ REPLYを使用したときに私のコードが機能しましたが、(ユーザーによって入力された)関数内でテストされています。しかし、私はこのような関数を呼び出す必要があります:ask_version "APP1" "APP1VERSION" $ APP1VERSIONで$ REPLYを置換する

p="5.5.5" 

function ask_version() { 
while true ; do 
echo -e "Give the version of $1" 
read -r 
    if [[ ! $REPLY =~ ^[0-9]\.[0-9]\.[0-9]$ ]] ; then 
    echo -e "Please respect the version format" 
    elif [ ! $REPLY == "$p" ] ; then 
    echo -e "The version is not the same tagged in GIT" 
    else 
    return 0 
    fi 
done 
} 
関連する問題