0

シェルスクリプト( #!/bin/sh )を使用するのはこれが初めてで、チュートリアルなどを読んで作業を進めてきましたが、キーの値の読み取りと書き込みに固執しています..

フォームの構成ファイルからキー=値のペアを読み込もうとしています

key1_begin=abc
key1_end=def

key2_begin=123
key2_end=jkl

.. and so on

ユーザーに次のようなスクリプトにパラメーターを渡してもらいたい

something.sh 1 x y z

ここで、最初のパラメーターは、適切なキーを変更するために使用される として機能します。したがって、ディレクトリが存在し、ファイルが存在することを確認した後、次を使用してソースを取得します

source config.cfg

次に、ID=$1 を使用して ID を保存し、次を使用してキーにアクセスします。

echo key${ID}_begin 

したがって、キーの値を取得するための読み取りは次のようになります

echo key${ID}_begin = $[key${ID}_begin]

ここで、「 key1_begin = abc 」を取得することを期待していますが、代わりに「 key1_begin = 0 」を取得し続けます。ただし、同じコマンドが数値に対しても機能するようです。たとえば、このコマンドを ID 2 で使用すると、「 key2_begin = 123 」となります。

なぜこれが数字ではうまくいくのにアルファベットではうまくいかないのか、誰かが私を正しい方向に向けてくれませんか?

そして、変数の値を変更するには何を使用しますか? 現在「eval」を使用していますが、これも数値でのみ機能するようです

[ ! -z $2 ] && eval key${ID}_end=$3

これに関するアドバイスや指針をいただければ幸いです。\

ありがとうございました

4

2 に答える 2

0

このように(bashを想定):

#! /bin/sh
ID=2
source mychild.sh
keyid="key${ID}_begin"
echo "key${ID}_begin = ${!keyid}"

要するに、bashでは、次のことができます

var=${!i}

または他のシェルでは:

var=`eval echo \$$i`
于 2012-04-19T08:09:08.520 に答える
0

ほとんどの場合、中間変数を使用する必要があります。

key1_begin=abc
var="key${ID}_begin"
echo "$var=${!var}"
于 2012-04-19T08:00:51.820 に答える