2

test1.sh と test2.shという 2 つのシェル スクリプト ファイルがあります。translogs.txtという別のファイルがあります。
ここで、test1.sh の 2 つの変数の値を translog.txt にコピーする必要があり、同じ変数をtest2.shの対応する値にコピーする必要があります。

test1.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
echo -e "$ONE\n$TIME">translog.txt;

トランスログ.txt

ONE="000012"
TIME="2013-02-19 15:31:06"

しかし、ここtest2.shでは、対応する変数に translog.txt と同じ値が必要です

test2.sh

#!/bin/sh
ONE="000012"
TIME="2013-02-19 15:31:06"
4

4 に答える 4

3

1乾燥液

$> cat translog.txt
ONE="000012"
TIME="2013-02-19 15:31:06"

perl正規表現では、 lookbehind 演算子grepを使用してこれらの値と一致させることができます。

$> grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt
"000012"

そしてのためにTIME

$> grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt
"2013-02-19 15:31:06"

したがって、test2.shスクリプトを使用しないと、次のように使用できます。

#!/bin/bash
ONE=`grep --only-matching --perl-regex "(?<=ONE\=).*" translog.txt`
TIME=`grep --only-matching --perl-regex "(?<=TIME\=).*" translog.txt`

2コマンドラインソリューション

以下のリンクの1つで指摘されている別の解決策は、次を使用することです。source(aka .)コマンドを使用して、ファイル内のすべての変数を現在のシェルにロードします。

$ source translog.txt

これで、ファイル内で定義された変数の値にアクセスできます。

$ echo $TIME
"2013-02-19 15:31:06"

3最も簡単な解決策

別のアプローチが@user2086768によって言及されました。これらの行を`test2.shに入れてください:

#!/bin/bash
eval $(cat translog.txt)

test2.shその結果、スクリプト内で2つの変数を割り当てることになります。

ONE="000012"
TIME="2013-02-19 15:31:06"

次の追加を簡単に確認できます。

echo $ONE
echo $TIME

これらのリンクも確認してください。

于 2013-02-19T11:10:38.903 に答える
1

有効なbashコードと同様translog.txtに、次のことができます。

source translog.txt

test2.shONETWO利用可能になりますtest2.sh

警告の言葉。これは、の値が信頼できないソースからのものである場合に、シェルスクリプトインジェクション攻撃にさらされる可能性がONEあります。TWO

于 2013-02-19T11:18:24.770 に答える
0

eval がうまくいくはずです。

このバージョンの test2.sh を使用してみてください。

test2.sh

#!/bin/bash
eval $(cat translog.txt)
echo $ONE
echo $TIME

これは以下を出力します:

000012

2013-02-19 15:31:06

于 2013-02-19T11:38:02.383 に答える
0

あなたのtranslog.txtがあなたの言う通りなら、これはうまくいくでしょう

#!/bin/sh
while read aa
do
  eval "$aa"
done < translog.txt
于 2013-02-19T11:15:29.130 に答える