28

私は次のようなファイルを持っています

name1=value1
name2=value2

シェルスクリプトを使用してこのファイルを読み取り、変数を設定する必要があります

$name1=value1
$name2=value2

これを実行できるスクリプトを提供してください。

以下の最初の答えを試しました。つまり、プロパティファイルを取得しましたが、値にスペースが含まれていると問題が発生します。スペースの後の新しいコマンドとして解釈されます。スペースが存在する場合、どうすれば動作させることができますか?

4

8 に答える 8

28

入力ファイルのすべての行がこの形式である場合、それをソースするだけで変数が設定されます。

source nameOfFileWithKeyValuePairs

また

. nameOfFileWithKeyValuePairs
于 2011-02-14T09:41:43.597 に答える
16

使用する:

while read -r line; do declare  "$line"; done <file
于 2011-02-14T09:49:21.450 に答える
6

@robinst の改良版

read_properties()
{
  file="$1"
  while IFS="=" read -r key value; do
    case "$key" in
      '#'*) ;;
      *)
        eval "$key=\"$value\""
    esac
  done < "$file"
}

変更点:

  • 静的ではなく動的なキー マッピング
  • コメント行をサポート (スキップ)

@kurumiさんの解決策もナイスですが、busyboxではサポートされていません

そしてここに完全に異なる変種があります:

eval "`sed -r -e "s/'/'\\"'\\"'/g" -e "s/^(.+)=(.+)\$/\1='\2'/" $filename`"

(私はエスケープで最善を尽くそうとしましたが、それで十分かどうかはわかりません)

于 2015-01-13T09:26:18.820 に答える
6

あなたのファイルの名前がsome.properties

#!/bin/sh
# Sample shell script to read and act on properties

# source the properties:
. some.properties

# Then reference then:
echo "name1 is $name1 and name2 is $name2"
于 2011-02-14T09:45:15.693 に答える
-6

sed 's/^/\$/' yourfilename

于 2011-02-14T11:12:30.660 に答える