bash + bashスクリプトを介してファイルから変数と値を読み取る

bash + bashスクリプトを介してファイルから変数と値を読み取る

次のファイル変数と値があります

# more file.txt
export worker01="sdg sdh sdi sdj sdk"
export worker02="sdg sdh sdi sdj sdm"
export worker03="sdg sdh sdi sdj sdf"

変数を読み取るためにソースを実行します。

# source file.txt

例:

echo $worker01
sdg sdh sdi sdj sdk

これまですべてが完璧です。

しかし、今私はファイルから変数を読み、単純なbashループを介して値を印刷したいと思います。 2番目のフィールドを読み、変数の値を印刷してみましょう。

#  for i in ` sed s'/=/ /g'  /tmp/file.txt | awk '{print $2}' `
   do  
   echo $i
   declare var="$i"
   echo $var
   done

ただし、値は印刷せず、変数のみを印刷します。

worker01
worker01
worker02
worker02
worker03
worker03

予想出力:

worker01
sdg sdh sdi sdj sdk
worker02
sdg sdh sdi sdj sdm
worker03
sdg sdh sdi sdj sdf

ベストアンサー1

がある場合はexport worker01="sdg sdh sdi sdj sdk"空白=に置き換えてくださいexport worker01 "sdg sdh sdi sdj sdk"。スペースで区切られたフィールドはexport、、worker01などです"sdgsdh

引用符を分割して削除する方が良い=ので、シェルを使用してください。

$ while IFS== read -r key val ; do
    val=${val%\"}; val=${val#\"}; key=${key#export };
    echo "$key = $val";
  done < vars
worker01 = sdg sdh sdi sdj sdk
worker02 = sdg sdh sdi sdj sdm
worker03 = sdg sdh sdi sdj sdf

key変数名とval値を含みます。もちろん、これは実際に入力を解析するのではなく、二重引用符がある場合はそれを削除するだけです。

おすすめ記事