ファイルで変数を定義して設定する方法は?

ファイルで変数を定義して設定する方法は?

2つのファイルがあり、one.txt異なるtwo.txt

one.txtファイルの内容:

"21"
"22"
"23"

2.txtファイルの内容:

"Hi how are you"
"Hello who are you"
"May I help you"

最初の行を抽出one.txtし、先頭に "_"(アンダースコア)を追加して変数にし、最初の行を抽出して宣言された変数two.txtに割り当てたいと思います。つまり、次のようにする必要があります。

_21="Hi how are you"
_22="Hello who are you"
_23="May i help you"
echo $_21     #This should print "Hi how are you"

変数は上記のように宣言する必要があります。 bashスクリプトを使用してこれを実行できますか?

答え1

@αГsнιιの答えのようなペーストを使用しますが、処理するのは少し簡単です。

while IFS=$'\t' read num value; do
  declare "_$num=$value"
done < <(paste {one,two}.txt)

それから

$ echo "$_21"
Hi how are you

$ echo "$_22"
Hello who are you

$ echo "$_23"
May I help you

答え2

eval "$(paste -d"_=''" /dev/null <(tr -d \" <one) /dev/null two /dev/null)"

paste-d="..."リストに定義された区切り文字を含むファイル/入力。

/dev/null最初のファイルコンテンツを作成し、_2番目のファイルtwoコンテンツを一重引用符で囲み、各ファイルコンテンツが拡張されないようにダミー入力として使用します(変数が含まれている場合はコマンドを置き換えます)。

1.txt:

"21"
"22"
"23"

2.txt:

"Hi $(date) how are you"
"Hello who are you"
"May I help you"

出力は次のとおりです

_21='"Hi $(date) how are you"'
_22='"Hello who are you"'
_23='"May I help you"'

$ echo "${_21}"
"Hi $(date) how are you"

関連変数に割り当てられる前に拡張するには、コマンドを次のように変更します。

$ eval "$(paste -d"_=" /dev/null <(tr -d \" <one) two )"
$ echo "${_21}"
Hi Tue 24 Nov 2020 12:47:40 AM +0330 how are you

関連情報