-2

Linuxシェルスクリプトは初めてです。スクリプトでプロパティ ファイルを読み取り、その値を任意の変数に保存する必要があります。これは、同じスクリプトで渡すことができるものと同じです。スクリプトを書いたので、要件を満たしていません。

!/bin/bash

. test1

flat

if [ "$1" == test1 ]; then
    flat=$1;  /assign value to var flat
    echo "flat"        
fi

test1 は以下を含むプロパティ ファイルです。

la=12

tu=15

今、私は実行したい:

./myscript la

プロパティファイルから読み取り、値をフラット変数に格納します。私を助けてください。

4

2 に答える 2

6

間接参照を使用する必要があるだけですが、そのためには、$1最初に特殊パラメーターの値を通常のパラメーターに格納する必要があります。

!/bin/bash

. test1

var="$1"

# Only assign to flat if the variable specified in var is defined
if [ -n "${!var:-}" ]; then
    flat="${!var}";  # assign value to var flat
    echo "flat"        
fi

まず、${!var}in という名前の変数の値に展開しますvar。が "foo" の場合varは と同じ$fooです。が「baz」の場合varは と同じ$bazです。

${var:-default}varが設定されていて、null 以外の値を持つ場合は、の値に展開されます。それ以外の場合は、':-' の後にあるものに展開されます。この場合は文字列のデフォルトです。文字列がない場合は、null 値が使用されます。そのため、設定されていない (または既に null 文字列であった)${var:-}場合は、null 文字列に展開されます。var

2 つを組み合わせて${!var:-}、変数 var を取得し、その値を変数名として使用します。次に、その変数を展開しようとし、設定されていないか null の場合は、null 文字列に展開します。したがって、varがの場合la、 の値に展開されますla。がで、変数が設定されていない場合varは、 null 文字列に展開されます。rere

最後に、-n演算子は引数の長さがゼロでないかどうかをテストします。つまり、 in という名前の変数を展開しようとした結果がvar空文字列でないことを確認します。それが正しい場合は、もう一度展開して (はい、少し冗長です)、その値を に割り当てますflat

答えが上に書かれているようにflat、スクリプトへの引数が で設定された変数の名前でない場合、変数は未定義ですtest1。関係なく設定されても構わない場合flat(たとえば、 )、ステートメントflat=""は必要ありません。ifの値を設定するには、1 行を使用するだけですflat

#!/bin/bash
. test1
var="$1"
flat="${!var:-}"
于 2012-07-17T13:25:40.370 に答える
-1

私が正しく理解していれば、間接的な変数の逆参照を実現したいと考えています (たとえば、この例を参照してください)。

解決策は使用することevalです:

eval flat=\$$1
于 2012-07-17T13:07:17.523 に答える