5

環境変数を定義した環境設定ファイルがあります。sourceを使用して、シェルスクリプト(bash)内でこれらの変数を取得します。

シェルスクリプトでcheckoutコマンドを使用して、環境変数で定義された場所からファイルをチェックアウトします。ここで、複数の場所を使用してファイルをチェックアウトする必要があります。ファイルは、シェルスクリプトのさまざまな実行に対して任意の数にすることができます。

たとえば。ユーザーは、構成ファイルにPATH1とPATH2の2つのパスを指定し、NUM_OF_PATHSを2として指定します。

私のシェルスクリプトでは、パスを使用するために以下のようなことをしたいと思います。

i=0
echo ${NUM_OF_PATHS}
while [ $i -lt ${NUM_OF_PATHS} ]
do
    checkout $PATH{$i}
    i=`expr $i + 1`
done

変数iを使用して環境変数PATH1またはPATH2などを作成するにはどうすればよいですか?

4

4 に答える 4

6
i=1
while [ $i -le ${NUM_OF_PATHS} ]
do
  CPATH=$(eval echo \$\{PATH$i\})
  echo "PATH$i: $CPATH"
  let i++ 
done

evalパラメータを結合して評価し、結合された式を実行します。ここで、evalは次のように実行されますecho ${PATH1}。これを行うために${...}、evalが評価後にそれらを受信できるように、最初にエスケープします。エスケープされていない特殊文字は、の$前だけiです。evalはこれを展開し、エスケープされた文字を取り除き、結果とともにechoを実行します。

したがって、にCPATH=$(eval echo \$\{PATH$i\})なりCPATH=$(echo ${PATH1})、CPATHはエコー出力を取得します。

于 2012-07-27T04:09:42.123 に答える
0

これが私があなたが望むことをするだろうと思う完全な例です。以下は、私が完全に理解していない理由で却下された私の元のメッセージです。

$ cat test.sh
function checkout() {
    echo "Registering $1"
}

PATH1="Path1;/usr/bin"
PATH2="Path2;/bin"
NUM_OF_PATHS=2

i=1
echo $NUM_OF_PATHS
while [ $i -le $NUM_OF_PATHS ]
do
    eval "checkout \$PATH$i"
    i=`expr $i + 1`
done
$ bash test.sh
2
Registering Path1;/usr/bin
Registering Path2;/bin
$

元のメッセージ「eval」コマンドを使用できます。次に例を示します(GNU bash、バージョン4.2.37(2)-リリースで動作します)。

$ A1="Variable 1"
$ A2="Variable 2"
$ for i in {1..2}; do eval "echo \$A$i"; done
Variable 1
Variable 2
$

文字列は「echo$A1」と「echo$A2」に評価され、evalは必要な処理を実行します。

于 2012-07-27T04:05:28.193 に答える
0

配列変数を使ってみませんか?マルチPATH1PATH2変数の代わりに1つの配列MYPATH[]を使用してください

MYPATH=(
path0
path1
path2
)
MYPATH[3]=path3

NUM_OF_PATHS="${#MYPATH[@]}"
echo ${NUM_OF_PATHS}

for ((i=0; i < NUM_OF_PATHS; i++))
do
    checkout ${MYPATH[$i]}
done
于 2012-07-27T07:38:58.440 に答える
-2

名前を中かっこで囲みます。${PATH$i}

于 2012-07-27T04:07:07.523 に答える