
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