2

次のような構造を持つbashスクリプトを変更しています。

#somewhere in the code
sim_counts=#... some value
function_name()
{
    set $sim_counts
    for hostname in $linux_hostnames; do
        if [ $1 -eq 0 ]; then # if sim_counts equal 0
            shift  # jump forward in sim_counts
            continue 
        fi
    # ... more code
    shift
    done
}

次に、スクリプトで呼び出されます。

function_name

この関数にパラメーターを導入したい:

#somewhere in the code
sim_counts=#... some value
function_name()
{
    ip=$1
    set $sim_counts
    for hostname in $linux_hostnames; do
        if [ $1 -eq 0 ]; then # if sim_counts equal 0
            shift  # jump forward in sim_counts
            continue 
        fi
    # ... more code
    shift
    done
}

そして、次の方法で関数を呼び出します。

function_name 10.255.192.123

$1関数パラメータとsetコマンドからの他の値の競合を避けるにはどうすればよいですか?

4

1 に答える 1

2

Bash リファレンス マニュアルのセット ビルトイン ページを正しく読んでいれば、あなたが書いたコードはそのまま機能すると思います。そのページから引用:

残りの N 個の引数は定位置パラメーターであり、$1、$2、… $N に順番に割り当てられます。特殊パラメータ # は N に設定されます。

本質的に、位置変数の既存の値は吹き飛ばされます。そのマニュアル ページの最初の文も興味深いものです。

このビルトインは非常に複雑であるため、独自のセクションが必要です。

要するに、コードは期待どおりに機能するはずだと思います。$1(関数呼び出しからの)の初期値を一時変数に保存しました。その特定の値を参照する限り$ip、問題はありません。私自身のテスト スクリプトでは、$1期待どおりに吹き飛ばされているようです。

于 2013-02-08T15:05:39.337 に答える