2

私はbashスクリプトに慣れていません。スクリプトチェック引数を書きました。コードは次のとおりです。

for (( i=1; i<=4; i++ ))
do
        if ! [[ "$"$i =~ .*[^0-9].* ]]; then
                echo "bad input was $i"
        fi
done

実際には、数値以外の引数を分割したいのですが、引数に関係なく常に答えが真または偽であるため、 "$"$i は間違っているようです。誰が間違いを教えてもらえますか?

4

3 に答える 3

3

間接的なパラメーター展開を使用しようとしているようです。

for (( i=1; i<=4; i++ ))
do
    if ! [[ ${!i} =~ .*[^0-9].* ]]; then
        echo "bad input was $i"
    fi
done

ただし、パラメーターの位置ではなく、パラメーターを直接反復処理する方がクリーンです。

for arg in "${@:1:4}"; do
    if ! [[ $arg =~ .*[^0-9].* ]]; then
        echo "bad input was $arg"
    fi
done
于 2013-10-25T21:11:42.167 に答える
1

次のようなものを使用します。

for i in "$@"; do
     [[ $i =~ .*[^0-9].* ]] || echo "bad input was $i"
done

注意: [[ 内部命令では、変数の前後に二重引用符を使用する必要はありません。

于 2013-10-25T20:33:31.983 に答える